在django项目中,我使用celery来运行异步任务。我想实现一个取消正在运行的任务的功能。
官方文档revoke:撤销任务说可以使用“revoke(terminate=True)”方法。我尝试过,但没有成功。 以下是我尝试过的一些方法:
...
task = AsyncResult("1e8fb3f3-4253-4bec-b71a-665ba5d23004")
print(task.state)
'STARTED'
task.revoke(terminate=True)
print(task.state)
'STARTED'
app.control.revoke("1e8fb3f3-4253-4bec-b71a-665ba5d23004", terminate=True)
print(task.state)
'STARTED'
最终它仍然执行完成。 有人遇到过类似的问题吗?或者还有其他方法可以满足我对芹菜的需求吗?任何帮助将不胜感激!
我在
Celery=5.3.0
中遇到了同样的问题,这个答案帮助我解决了它。它表示您应该根据结果撤销任务,例如:
result = add.apply_async(args=[2, 2], countdown=120)
result.revoke()
我对任何建议都没有运气,直到我在文档中读到了这个
如果您想在重新启动之间保留持久撤销列表 您需要使用以下命令指定要存储这些内容的文件 –statedb 对芹菜工人的争论
所以这意味着,当您运行与此类似的 celery 项目时:
celery -A app_name worker --beat
确保您使用文件来存储(文件夹需要存在并具有权限,对于我的项目来说,这工作正常,因为我有 staticfiles 文件夹,并且创建了worker.state 文件)
celery -A config worker --beat --statedb=staticfiles/worker.state
现在,调用此命令时所有任务都会被撤销
app.control.revoke(task_id)