我想在日志中记录各种任务的回溯 - 可以这样做吗?结果有父母,甚至可以输出图表,但我无法在任务或请求本身中看到父任务或任务ID。我是否必须手动将父亲的任务ID传递给每个子任务?
推论:将task_id设置为与父级相同的值是否安全?
编辑:示例代码:
@app.task()
def root_task(arg):
if arg:
subtask.delay(arg)
@app.task()
def subtask(arg):
import celery
print(dir(celery.current_task)) # get parent task id here?
print(dir(celery.current_task.request)) # no parent here either
请注意,理想情况下我想在日志过滤器中获取调用任务ID,这显然无法访问函数本地,因此对我来说也没有bind=True
。
答案 0 :(得分:1)
无需手动传递父task_id
。
如果你有像这样的简单链
@app.task()
def task1():
return('task1')
@app.task()
def task2():
return('task2')
c = chain(task1.si(), task2.si())
您可以看到父母任务ID
In [17]: r = c()
In [18]: r.task_id
Out[18]: '9c17b0b6-206c-458f-96ca-be23bc20aa9b'
In [19]: r.parent.task_id
Out[19]: 'e1376a29-6052-427c-8c8e-b14abcb58477'
r.parent
具有所有必需的属性。