Celery关闭执行中的任务策略

问题描述:设计的系统中需要执行一个长时间的运行的任务,这个任务可以比作是“开启机器后,机器的运行”。现在需要对机器的停止可控,于是需要研究Celery中关闭执行中的任务方法。

首先,参考文章《celery 停止执行中 task》,这篇文章中提出“celery 管理工具flower里面好像有停止celery task的功能”,于是开启Celery的flower发现,确实可通过“flower”进行控制关闭。

# 创建任务
@app.task   
def celery_task1():
    while True:
        time.sleep(3)
        print "this is celery task1"

这里设置一个任务,任务中循环执行语句打印,以模拟无限长的任务。(默认读者具备Celery使用的基础知识,一些基本使用方法可以参考一下我的另一篇博文:《Celery分布式实践》)

开启Celery服务:

celery -A XXXX worker -l info -Q XXX

然后,开启Celery的flower控制:

celery flower --broker=Celery中使用的broker

1、通过flower结束任务

 根据输出的信息,打开对应的网址,确保flower服务已开启:

 这里,我使用一个单独的py文件启动任务:

from celeryProject1 import tasks1

if __name__ == "__main__":
    tasks1.celery_task1.delay()

运行,查看flower控制界面:

按照上图箭头示意,依次点击,即可结束任务。 Celery服务监控窗口显示:

2、通过程序控制结束任务

修改启动任务的程序:

from celeryProject1 import tasks1
from celery.app.control import Control
from celeryProject1.celery import app
import time

if __name__ == "__main__":
    t = tasks1.celery_task1.delay()
    print "*******task id******", str(t.id)

    time.sleep(20)
    # # 停止任务
    celery_control = Control(app=app) 
    celery_control.revoke(str(t.id), terminate=True)  

其中,from celeryProject1.celery import app,对应程序配置文件的app设置(具体根据自己的实际情况修改)

“t.id”是获取任务的id,然后通过revoke方法停止任务的执行。

运行上述程序,观察Celery服务的输出:

 任务“celery_task1”每3秒执行一次打印输出“"this is celery task1"”,发布任务后,主程序等待20秒后,结束任务。

另外,可以观察到主程序输出的任务id于“flower”中任务的UUID一致:

 

建议阅读:

问题:如何使用celery随时开启任务,随时关闭正在运行的任务

celery 停止执行中 task

Celery3.1文档-revoke

 

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值