芹菜。获取当前链的id
Posted
技术标签:
【中文标题】芹菜。获取当前链的id【英文标题】:Celery. Get id of current chain 【发布时间】: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
。
【问题讨论】:
【参考方案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'
【讨论】:
以上是关于芹菜。获取当前链的id的主要内容,如果未能解决你的问题,请参考以下文章