2011-02-18 21 views
6

Celeryd'ı bir daemon olarak çalıştırıyorum, ama bazen onu incelikle durduracağım. TERM sinyalini gönderdiğimde ve kuyrukta öğeler olduğunda (bu durumda service celeryd stop) celeryd yeni işler almayı durduracak ve tüm çalışan süreçlerini kapatacaktır. Ancak ana süreç kapanmaz.Sorunlar durduyor celeryd

İki ayrı çalışan makinede çalışırken celeryd olduğum bir senaryoya rastladım: A ve B. RabbitMQ sunucusunda yaklaşık 1000 mesajla A'yı kapattım ve yukarıda açıkladığım durumu yaşadım . B çalışmaya devam etti, ancak sunucuda kalan yaklaşık 40 mesajla durdu. Ancak, B'yi doğru şekilde durdurabiliyordum.

Kuyruktan 40 öğeyi alıp almayacağını görmek için B'yi yeniden başlattım, ancak olmazdı. Ardından, A'yı zorla öldürdüm, sonra B görevlerini yerine getirdi ve tamamladı.

Sonucum, ana işlemin, çocukları için RabbitMQ sunucusundan 40 öğeyi ayırdığıdır. Çocukları doğru şekilde toplayacak, ancak el ile öldürmediğim sürece eşyaları RabbitMQ'ye geri vermeyecek.

Benzer bir şey yaşayan var mı? Ben kereviz 2.2.2

+0

büyük olasılıkla bazı çocuk süreçleri hala IO operasyonlarında asılı kalıyor, bir G/Ç işlemi olduğunda celeryd'i durdurmaya çalışırken benzer sorunlar yaşadım - süreç sıkışıp kaldı ve yalnızca -9 yardımcı oldu. , bu yardımcı olabilir emin değilim, ancak iş parçacığı sizin için çalışacak gibi celeryd gevent veya Eventlet (celeryd -P eventlet) ile çalıştırıyorsanız deneyin öneririz. – Jerzyk

cevap