芹菜 – 获取当前任务的任务ID

如何从任务中获取任务的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) 

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

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

如果任务接受它,Celery会设置一些默认的关键字参数。 (你可以通过使用** kwargs来接受它们,或者专门列出它们)

 @task def do_job(path, task_id=None): cache.set(task_id, operation_results) 

默认关键字参数列表logging在这里: http : //ask.github.com/celery/userguide/tasks.html#default-keyword-arguments

自Celery 2.2.0以来,与当前执行的任务有关的信息被保存到task.request(它被称为“上下文”)。 所以你应该从这个上下文中获得任务ID(而不是从关键字参数,这是弃用):

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

所有可用字段的清单logging在这里: http : //celery.readthedocs.org/en/latest/userguide/tasks.html?highlight=requestcontext#context

从celery 3.1开始,你可以使用bind decorator参数来访问当前的请求:

 @task(bind=True) def do_job(self, path): cache.set(self.request.id, operation_results)