如何从芹菜链中返回第一个任务的结果?

时间:2013-01-15 15:50:33

标签: python django celery

这些是我的任务:

@task(name = 'hello')
def hello():
    print "hello"
    return "helo"

@task(name = 'hey')
def hey(resp):
    print resp

我这样称呼他们:g = celery.chain(hello.s(),hey.s()) 但是我希望它像这样完成:你好任务应该返回一个值,不仅要给任务“嘿”它还应该返回一个值。我的意思是,一旦执行完毕,我应该能够获得“hello”的返回值。怎么做?

1 个答案:

答案 0 :(得分:1)

调用链时返回的结果实例将用于链中的最后一个任务,但它会将引用保留回父级,因此您可以遍历父级以获取第一个任务:

r = chain(hello.s(), hey.s())()

r.parent.get(timeout=1)
r.parent.parent.get(timeout=1)

first = r
while first.parent:
    first = first.parent

请参阅http://docs.celeryproject.org/en/latest/userguide/canvas.html#chains