Celery-获取当前任务的任务ID


77

如何从任务中获取任务的task_id值?这是我的代码:

from celery.decorators import task
from django.core.cache import cache

@task
def do_job(path):
    "Performs an operation on a file"

    # ... Code to perform the operation ...

    cache.set(current_task_id, operation_results)

这个想法是,当我创建任务的新实例时,我task_id从任务对象中检索。然后,我使用任务ID来确定任务是否已完成。我不想path值跟踪任务,因为文件在任务完成后被“清理”,并且可能存在也可能不存在。

在上面的示例中,我将如何获取值current_task_id

Answers:



122

从Celery 2.2.0开始,与当前执行的任务有关的信息将保存到task.request(称为“上下文”)。因此,您应该从此上下文(而不是从已弃用的关键字参数)获取任务ID:

@task
def do_job(path):
    cache.set(do_job.request.id, operation_results)

这里记录了所有可用字段的列表:http : //celery.readthedocs.org/en/latest/userguide/tasks.html?highlight=requestcontext#context


1
您可以在任务之外获取此ID吗?例如运行任务,获取ID,并在任务完成时使用此ID进行检查。
DominiCane

是的,您可以从AsyncResult获取ID,然后通过ID重新创建AsyncResult,请检查docs docs.celeryproject.org/en/latest/reference/celery.result.html
Alex Lokk

如果您有Celery 3+,请使用Balthazar的答案。更清晰直接。
亚历克斯·洛克

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.