我正在将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
答案 0 :(得分:3)
我认为这与:
有关https://github.com/celery/celery/issues/264
设置
CELERY_DISABLE_RATE_LIMITS = False
你的settings.py文件中的应该可以工作。