编程语言
首页 > 编程语言> > python – 如何告诉芹菜工人停止接受任务?如何检查芹菜工人的任务是否正在运行?

python – 如何告诉芹菜工人停止接受任务?如何检查芹菜工人的任务是否正在运行?

作者:互联网

场景:

>使用Celery在包含Python / Flask Web应用程序和后台任务的服务器上运行的系统
> Web应用程序和芹菜工作者都作为新手工作运行(Nginx背后的Web应用程序)
>使用以下脚本完成生产部署:

>停止新贵工作
>将代码推送到服务器
>运行任何数据库迁移
>启动新贵作业

如何增强部署脚本以便执行以下操作?:

>告诉芹菜工人停止接受任务
>等到任何当前正在运行的芹菜任务完成
>停止新贵工作
>将代码推送到服务器
>运行任何数据库迁移
>启动新贵作业

解决方法:

作为部署的一部分运行的以下脚本解决了以下问题:

import time
from celery.app.control import Control
from myapp.tasks import celery # my application's Celery app

if __name__ == "__main__":
    control = Control(celery)
    control.cancel_consumer("celery") # queue name, must probably be specified once per queue, but my app uses a single queue

    inspect = control.inspect()
    while True:
        active = inspect.active()
        running_jobs = []
        for key, value in active.items():
            running_jobs.extend(value)
        if len(running_jobs) > 0:
            print("{} jobs running: {}".format(len(running_jobs), ", ".join(job["name"] for job in running_jobs)))
            time.sleep(10)
        else:
            print("No running jobs")
            break

标签:upstart,continuous-deployment,python,linux,celery
来源: https://codeday.me/bug/20191002/1841476.html