django - 停止 celeryd 的问题

标签 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

最佳答案

我认为这与以下内容有关:

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

环境

CELERY_DISABLE_RATE_LIMITS = False

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

关于django - 停止 celeryd 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5045687/

相关文章:

Django + AWS Secret Manager 密码轮换

通过 Ajax 'is not defined' 调用的 Python 函数

python - Django 中间件错误

Django Celery 超过了时间限制?

django - Css 不适用于 FastCGI 和 Lighttpd

python - 使用 Celery 和 Amazon SES 在 Django 中安排电子邮件

python - Celery 的类似信号量的机制

Celery:限制内存使用(大量 django 安装)

linux - 如何使用 Apache 自动启动 Django Celery?

python - CeleryBeat 进程消耗所有操作系统内存