0

セロリでマルチスレッドの同時実行がどのように機能するかをまとめるのに苦労しています。

使用するデフォルトのタイプは-P eventlet. -P threadsGILが原因で機能しないと想定しており、実際には同時実行性はありません。

しかし、(ここの例から)単純にタスクを指定-P eventletして起動することはできず、 を介して並列タスクを開始する必要があるようにも見えますcelery.groupこれによると、マルチプロセス ワーカーはメッセージを並行して消費することはありません。

つまり、要約すると、タスクの真の並列化が行われているように見えます。マルチプロセッシングを使用する必要があります。イベントレットを使用できますが、タスクの実行方法を変更する必要があります。私のタスクは外部トリガーに応じてランダムに起動するため、いつ、いくつ作成する必要があるのか​​事前にわかりません。

これは正しいです?

4

1 に答える 1

0

私は自分自身でイベントレット プールを使用して実験を始めたばかりですが、これまでのところ、タスクを呼び出すために group() を使用して同時実行性を利用する必要はありません。彼らがそれを例に使ったのは偶然だと思います。ただし、おそらくこの 2 つの概念は、しばしば一緒にうまく機能します。Python for ループ内の個別の apply_async() 呼び出しで適用されたタスクで、まだイベントレットの同時実行性を取得しています。これは、GroupResult 機能が必要ない場合はおそらく問題ありません ( http://celery.readthedocs.org/en/latestを参照)。 /userguide/canvas.html#groups )。

于 2014-04-17T11:57:22.280 に答える