芹菜。获取当前链的 id

Nik*_*nyh 2 python celery

基于当前任务的 get id

我称链为:

chain = (nice_task.s(a=1) |
         task2.s(a=2)).apply_async()
Run Code Online (Sandbox Code Playgroud)

任务定义为:

@celery.task(bind=True)
def nice_task(self, a):
    print a
    print self.request.id  # None
    return a
Run Code Online (Sandbox Code Playgroud)

如何获取链内任务的ID?

我试图打开/关闭CELERY_ALWAYS_EAGER- 没有效果。

UPDself.request有空的context

Chi*_*and 5

调用链将调用其中的任务并返回链中最后一个任务结果

当你像这样调用链时

chain = (nice_task.s(a=1) | task2.s(a=2)).apply_async()
Run Code Online (Sandbox Code Playgroud)

它正在返回 的结果task2。您可以通过检查来验证这一点chain.info

In [25]: chain.info
Out[25]: 'task2'

In [26]: chain.id
Out[26]: 'bec26eff-2dfe-4203-aed2-a122d908c905'
Run Code Online (Sandbox Code Playgroud)

要访问上一个任务,您需要使用.parent属性。chain.parent给你以前的任务,你可以从.id.

In [27]: chain.parent
Out[27]: <AsyncResult: 242d338b-35fe-4f16-be07-36d0d8f2bb53>

In [28]: chain.parent.info
Out[28]: 'task1'

In [29]: chain.parent.id
Out[29]: '242d338b-35fe-4f16-be07-36d0d8f2bb53'
Run Code Online (Sandbox Code Playgroud)