6

我将 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

4

1 回答 1

3

我相信这与:

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

环境

CELERY_DISABLE_RATE_LIMITS = False

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

于 2011-03-23T16:51:17.263 回答