1

タスクAの後にタスクBを実行する必要がある場合がありますが、タスクAの結果を返します。ドキュメントを見て、(同期サブタスクの起動を避ける)しようとしました

したがって、次のようなチェーンを使用します。

@celery.task
def A():
    return 5

@celery.task
def B():
    return 2

def do_all():
    chain = A.s() | B.s()
    chain()
    return result_of_A

しかし、これはうまくいきません。私の場合、必要なもの:

  • B にはパラメータがありません。A の結果は受け入れません。
  • B はA の完了に実行する必要があります
  • B が完了するのを待つ必要はなく、その結果も必要ありません (B は非同期でなければなりませんか?)
  • do_all で A の結果を返すにはどうすればよいですか? (Aは同期に違いない?)

これをチェーンやその他のサブタスク プリミティブで実装することは可能ですか?

4

1 に答える 1

0

プリミティブでこれを行う方法を思いつくことはできません。おそらく1つあります。しかし、別の方法としては、タスク A でon_successorafter_returnハンドラーを使用してタスク B を開始するという方法があります。このignore_resultオプションも使用すると、タスク B の呼び出しは完全にファイア アンド フォーゲットになります。

于 2013-08-26T19:19:26.063 に答える