gpt4 book ai didi

python - celery 生产优雅重启

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:39 24 4
gpt4 key购买 nike

我需要重新启动 celery 守护进程,但我需要它告诉当前工作人员在任务完成时关闭,然后在旧工作人员仍在关闭时启动一组新工作人员。

守护进程的当前优雅选项等待所有任务完成后再重新启动,这在您有长时间运行的作业时没有用。

请不要建议 autoreload,因为它目前在 4.0.2 中没有记录。

最佳答案

好吧,我最终做的是使用 supervisord 和 ansible 来管理它。

[program:celery_worker]
# Max concurrent task you wish to run.
numprocs=5
process_name=%(program_name)s-%(process_num)s
directory=/opt/worker/main
# Ignore this unless you want to use virtualenvs.
environment=PATH="/opt/worker/main/bin:%(ENV_PATH)s"
command=/opt/worker/bin/celery worker -n worker%(process_num)s.%%h --app=python --time-limit=3600 -c 5 -Ofair -l debug --config=celery_config -E
stdout_logfile=/var/log/celery/%(program_name)s-%(process_num)s.log
user=worker_user
autostart=true
autorestart=true
startretries=99999
startsecs=10
stopsignal=TERM
stopwaitsecs=7200
killasgroup=false

您可以使用 supervisor 来停止/启动 worker 以加载新代码,但它会等待所有 worker 停止后再重新启动它们,这对于长时间运行的作业来说效果不佳。最好只是终止 MainProcesses,这将告诉工作人员停止接受工作并在完成时关闭。

ps aux | grep *celery.*MainProcess | awk '{print $2}' | xargs kill -TERM

Supervisor 将在它们死亡时重新启动它们。

当然,在不完全停止所有工作人员的情况下更新依赖关系是几乎不可能的,这为使用 docker 之类的东西提供了一个很好的案例。 ;)

关于python - celery 生产优雅重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42812125/

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