【问题标题】:Celery. Get id of current chain芹菜。获取当前链的id
【发布时间】:2016-07-14 09:04:06
【问题描述】:

基于get id for current task

我把链叫做:

chain = (nice_task.s(a=1) |
         task2.s(a=2)).apply_async()

任务定义为:

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

如何获取链内任务的ID?

我尝试打开/关闭CELERY_ALWAYS_EAGER - 没有任何效果。

UPD 还有self.request 有空context

【问题讨论】:

    标签: python celery


    【解决方案1】:

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

    当你像这样调用链时

    chain = (nice_task.s(a=1) | task2.s(a=2)).apply_async()
    

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

    In [25]: chain.info
    Out[25]: 'task2'
    
    In [26]: chain.id
    Out[26]: 'bec26eff-2dfe-4203-aed2-a122d908c905'
    

    要访问上一个任务,您需要使用.parent 属性。 chain.parent 为您提供之前的任务,您可以从 .id 获取 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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 2012-09-28
      • 2015-09-28
      • 1970-01-01
      • 2023-04-11
      • 2014-07-14
      • 2021-09-03
      相关资源
      最近更新 更多