gpt4 book ai didi

python - 在 docker 容器中优雅地停止 celery

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:48 25 4
gpt4 key购买 nike

我在 docker 容器中运行 celery,处理来自 rabbitmq 的任务。我正在尝试停止并删除 celery 容器,同时允许当前正在运行的任务完成。文档建议将 TERM 或 INT 信号发送到主进程应该温暖关闭 celery,尽管我发现子进程刚刚被杀死。

当我向 TERM 发送它抛出的正在运行的进程时:

WorkerLostError('Worker 过早退出:信号 15 (SIGTERM)。',)

当我发送 INT 时,正在运行的进程只是没有错误地退出,尽管它也不允许任务按照文档建议的那样完成。

我正在使用以下命令启动 docker 容器:su -m celery_user -c "p​​ython manage.py celery worker -Q queue-name"

关于为什么会发生这种情况有什么想法吗?会不会是信号终止了容器以及 celery 进程?

我正在发送信号:docker kill --signal="TERM"containeriddocker exec containerid kill -15 1

最佳答案

docker kill 将杀死容器。您需要做的是仅将信号发送到主 celery 进程。

我个人使用 docker 容器内的 supservisord 来管理 celery worker。默认情况下,supervisord 将发送 SIGTERM 来停止进程。

这是 celery 的示例主管配置

[program:celery]
command=celery worker -A my.proj.tasks --loglevel=DEBUG -Ofair --hostname celery.host.domain.com --queues=celery
environment=PYTHONPATH=/etc/foo/celeryconfig:/bar/Source,PATH=/foo/custom/bin:/usr/kerberos/bin
user=celery-user
autostart=true
stdout_logfile=/var/log/supervisor/celery.log
redirect_stderr=true

关于python - 在 docker 容器中优雅地停止 celery ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35141705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com