Celery 命名任务执行并通过名称获取任务执行

问题描述 投票:0回答:1

我有一个名为

my_task
的 Celery 任务。我通过多次调用
my_task.delay()
来创建任务的多次执行。我想为每次执行提供唯一的标签/名称,并能够获取和停止给定标签/名称的任务执行。我怎样才能做这样的事情?

python celery django-celery
1个回答
0
投票

任务在创建时会分配一个 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)

这假设您使用的是支持任务撤销的代理。

© www.soinside.com 2019 - 2024. All rights reserved.