1

これらは私のタスクです:

@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タスクはタスク "hey"に値を返すだけでなく、値を返す必要があります。つまり、実行が完了すると、「hello」の戻り値を取得できるはずです。どうやってするの?

4

1 に答える 1

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を参照してください

于 2013-01-16T19:59:32.693 に答える