芹菜 - 如何记录父任务ID?

时间:2016-07-07 15:43:15

标签: python celery

我想在日志中记录各种任务的回溯 - 可以这样做吗?结果有父母,甚至可以输出图表,但我无法在任务或请求本身中看到父任务或任务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

1 个答案:

答案 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具有所有必需的属性。