我将 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
最佳答案
我认为这与以下内容有关:
https://github.com/celery/celery/issues/264
环境
CELERY_DISABLE_RATE_LIMITS = False
在您的 settings.py 文件中应该可以工作。
关于django - 停止 celeryd 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5045687/