Question

J'utilise le céleri en tant que démon, mais j'ai parfois du mal à l'arrêter correctement.Lorsque j'envoie le signal TERM et qu'il y a des éléments dans la file d'attente (dans ce cas service celeryd stop) le céleri cessera de prendre de nouveaux emplois et arrêtera tous les processus de travail.Toutefois, le processus parent ne s'arrêtera pas.

Je viens de tomber sur un scénario dans lequel le céleri s'exécutait sur deux machines de travail distinctes :A et B.Avec environ 1 000 messages sur le serveur RabbitMQ, j'ai arrêté A et j'ai vécu la situation que j'ai expliquée ci-dessus.B a continué à fonctionner, mais a ensuite stagné avec environ 40 messages laissés sur le serveur.J'ai cependant pu arrêter B correctement.

J'ai redémarré B pour voir si cela supprimerait les 40 éléments de la file d'attente, mais ce ne serait pas le cas.Ensuite, j'ai durement tué A, après quoi B a saisi et terminé les tâches.

Mes conclusions sont que le processus parent a réservé les 40 éléments de notre serveur RabbitMQ pour ses enfants.Il récoltera les enfants correctement, mais ne rendra pas les éléments à RabbitMQ à moins que je ne le tue manuellement.

Quelqu'un a-t-il vécu quelque chose de similaire?

J'utilise Celery 2.2.2

Était-ce utile?

La solution

Je crois que cela est lié à :

https://github.com/celery/celery/issues/264

Paramètre

CELERY_DISABLE_RATE_LIMITS = False

dans votre fichier settings.py devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top