芹菜 – 获取当前任务的任务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)