Problèmes pour arrêter le céleri
-
15-11-2019 - |
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
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.