首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >芹菜生产平稳重启

问芹菜生产平稳重启
EN

Stack Overflow用户
提问于 2017-03-15 22:06:56
回答 3查看 2.5K关注 0票数 2

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

守护进程上的current graceful选项等待所有任务完成后再重新启动,这在作业长时间运行时没有什么用处。

请不要建议自动重新加载,因为它目前在4.0.2中没有文档。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-27 23:00:17

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

代码语言:javascript
复制
[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停止/启动工作进程来加载新代码,但它将等待所有工作进程停止,然后再重新启动它们,这对长时间运行的作业不起作用。最好只使用MainProcesses,它将告诉工作人员停止接受作业,并在完成工作后关闭。

代码语言:javascript
复制
ps aux | grep *celery.*MainProcess | awk '{print $2}' | xargs kill -TERM

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

当然,在不完全停止所有工作者的情况下更新依赖项是非常不可能的,这为使用docker之类的东西提供了一个很好的例子。;)

票数 3
EN

Stack Overflow用户

发布于 2019-04-12 12:59:55

在Celery4上,我必须修补任务基类才能使其工作。Source

代码语言:javascript
复制
import signal
from celery import Celery, Task
from celery.utils.log import get_task_logger
logger = get_task_logger('my_logger')

class MyBaseTask(Task):
    def __call__(self, *args, **kwargs):
        signal.signal(signal.SIGTERM,
                      lambda signum, frame: logger.info('SIGTERM received, 
                                            wait till the task finished'))
        return super().__call__(*args, **kwargs)

app = Celery('my_app')
app.Task = MyBaseTask

此外,还有一个patch可防止在warn关闭时重新安排时间

票数 0
EN

Stack Overflow用户

发布于 2019-04-12 15:24:54

我们的任务可能长达48小时。当我们有一个新版本并将新版本部署到生产环境中时,您所说的优雅重启是非常常见的。我们所做的只是向正在运行的工作进程发送SIGTERM (关闭)信号,然后并行启动一组全新的工作进程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42812125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档