我有一个名为
my_task
的 Celery 任务。我通过多次调用 my_task.delay()
来创建任务的多次执行。我想为每次执行提供唯一的标签/名称,并能够获取和停止给定标签/名称的任务执行。我怎样才能做这样的事情?
任务在创建时会分配一个 ID。要撤销任务,您可以仅使用任务对象本身的
revoke
方法,也可以使用任务 ID 调用 app.control.revoke
。
task = my_task.delay()
print(task.id) # a string identifier like abc1234-5678-4bec-b71a-665ba5d23004
# cancel _this_ task
task.revoke()
# or
app.control.revoke(task.id)
如果您确实想通过普通名称引用这些内容,您可以存储名称到 ID 的映射...
tasks = {} # a mapping to store names to tasks (or task IDs)
task = my_task.delay()
name = 'foo'
tasks[name] = task.id
# then later, decide you want to cancel task 'foo'
...
foo_task_id = tasks['foo']
app.control.revoke(foo_task_id)
这假设您使用的是支持任务撤销的代理。