停止芹菜的问题

Zac*_*ach 6 django celery django-celery celeryd

我正在运行celeryd作为守护进程,但我有时无法优雅地停止它.当我发送TERM信号并且队列中有项目时(在这种情况下service celeryd stop),celeryd将停止接受新的工作,并关闭所有工作进程.但是,父进程不会关闭.

我刚刚碰到了一个场景,我在两台独立的工作机器上运行celeryd:A和B.在RabbitMQ服务器上有大约1000条消息,我关闭了A,并且遇到了我上面解释过的情况.B继续工作,但随后在服务器上留下了大约40条消息.然而,我能够正确地阻止B.

我重新启动了B,看看是否会将40个项目从队列中删除,但事实并非如此.接下来,我很难杀死A,之后B抓住并完成了任务.

我的结论是父进程已经为我的RabbitMQ服务器保留了40个子项.它将正确收割孩子,但除非我手动杀死它,否则不会将项目释放回RabbitMQ.

有没有人经历类似的事情?

我正在运行Celery 2.2.2

Ada*_*son 3

我相信这与:

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

环境

CELERY_DISABLE_RATE_LIMITS = False
Run Code Online (Sandbox Code Playgroud)

在你的settings.py 文件中应该可以工作。