Celery で 2 つの異なるタスクを同時に実行できないようにする方法はありますか? 同時実行レベル=1 で新しいキューを定義し、それらのタスクをそのキューに送信することを考えていましたが、例が見つかりませんでした。それは可能ですか?
ありがとう!
Celery で 2 つの異なるタスクを同時に実行できないようにする方法はありますか? 同時実行レベル=1 で新しいキューを定義し、それらのタスクをそのキューに送信することを考えていましたが、例が見つかりませんでした。それは可能ですか?
ありがとう!
はい、全体的なスループットを気にする必要がない場合は、別のキューを作成し、同時実行数を 1 に設定した専用ワーカーを用意することができます。必要な数のキューを作成し、各ワーカーが受け取るキューを構成できます。からのメッセージ。
ワーカーを開始するときに、パラメーターを渡して-Q
そのキューを設定し、パラメーターを渡して-c
使用するスレッド数を設定できます。これについては、ワーカー ガイドのキューと同時実行のセクションで説明されています。
celery -A my_project worker -l info -Q queue1 -c 1
次に、ルーティング ガイドを使用して、各タスクがどのキューに移動するかを定義するグローバル マッピングを設定できます。
CELERY_ROUTES = {
'my_app.tasks.task1': {'queue': 'queue1'},
'my_app.tasks.task2': {'queue': 'queue2'},
}
または、 Calling Tasks Guideに基づいて、各タスク インスタンスを送信するときにキューを指定することもできます。
task1.apply_async(queue='queue1')