You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入celery revoke方法报错No module named 'celery.tasks'及替代方案咨询

Celery任务撤销与状态检查的正确方法

你遇到的导入错误是因为Celery版本更新后,celery.tasks.control这个模块已经被移除了,现在有两种更可靠的方式来撤销任务:

  • 通过Celery应用实例直接调用
    先确保你已经初始化了Celery应用实例,然后直接用它的control.revoke方法:

    from celery import Celery
    
    # 初始化你的Celery应用
    app = Celery('your_task_app', broker='redis://localhost:6379/0')
    
    # 撤销指定ID的任务,terminate=True会终止正在运行的任务
    app.control.revoke('your_task_id', terminate=True)
    # 如果只是想取消尚未启动的任务,去掉terminate参数即可
    # app.control.revoke('your_task_id')
    
  • 通过Control类调用
    也可以单独导入Control类,结合应用实例使用:

    from celery import Celery
    from celery.app.control import Control
    
    app = Celery('your_task_app', broker='redis://localhost:6379/0')
    control = Control(app)
    control.revoke('your_task_id', terminate=True)
    

如果要检查任务状态,可以用AsyncResult:

from celery.result import AsyncResult
from celery import Celery

app = Celery('your_task_app', broker='redis://localhost:6379/0')

# 根据任务ID获取结果对象
task_result = AsyncResult('your_task_id', app=app)
# 打印任务状态(可选值:PENDING、STARTED、SUCCESS、FAILURE等)
print(task_result.status)
# 如果任务已完成,获取执行结果
if task_result.status == 'SUCCESS':
    print(task_result.result)

注意:terminate=True会给worker发送终止信号(默认是SIGTERM),强制结束正在运行的任务,但可能会导致资源未正确释放,非必要情况下谨慎使用。如果你的worker分布在多个节点,app.control.revoke会向所有worker广播撤销指令,无需单独操作每个节点。

内容的提问来源于stack exchange,提问作者Prathmesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:07:05