2017-02-23 6 views
1

は今、私はいくつかの大きなタスクを持っており、それらのすべてがいくつかの小さな作業で作られたプロセスをブロックしないようにどのように、私はブローカーにそれらを入れて、一つの大きなタスクの全ての小タスクが終了したとき、私はセロリにコールバックが、

chord([task11.s(),task12.s()])(mycallback.s()).get() 
chord([task21.s(),task22.s()])(mycallback.s()).get() 
:私はセロリが唯一、私は一つの大きな課題がありますが、私は次のように書いた場合、私は、そう 多くを持っている場合は、プリミティブ和音はそれを行うことができます知っているこれらの小さなタスク の結果に対処するためのコールバックが必要になります

2行目は最初の行が終了するまで開始されませんが、このようにして、一部のワーカーは長い間アイドル状態になります。これはうまくいきません。 したがって、ある状況でコールバックできるセロリ起こるが、そうではないプロセスをブロックしますか?

============================================== !@Gigapalmerを作品apply_async

は、助けてくれてありがとう

+0

パラレル化できるものとそうでないものは分かりません。 – MKesper

+0

例えば、私はユーザ名のリストを持っていて、たくさんのウェブサイトを持っていますが、これらのウェブサイトにユーザ名が登録されていることを確認して、コールバック関数を使用してこれらの結果を統計します。すべてのWebサイトのチェック機能を並列化してください。ただし、1つのユーザー名を入力するだけですが、多くのユーザー名がある場合は、 前のようにコードを記述すると、2番目のユーザー名は最初に終了します最初のもののために終了し、私は2番目のもののためにワーカーを使用したい – Tarjintor

+1

私はセロリをしばらく前に使用しました、 'get()'は同期で、 'apply_async()'は非同期です。 – Gigapalmer

答えて

1

1が終了すると、あなたが技術的に新しいジョブを作成しますapply_asyncとチェーン内の次の1と必要なパラメータを呼び出すように(非同期メソッドを結ぶ必要があります試してみてください別のキューにある)。