Celery 異なるタスクを並列で実行し、結果を異なるタスクに渡して実行する
Celeryのチュートリアルgroupを使用して複数タスクを並列実行
chordを使用し、groupで実行した結果を別タスクに渡すことができることを見てみました。
Celery 5.4 チュートリアル アプリケーションでの使用
例では同じaddタスクをgroupで実行し、結果を合算していましたが、
念のため異なるタスクの実行結果をchordできるか見てみます。
動作テスト
1 + 2(add)と4 * 5(mul)をgroupで並列実行。
結果リストを合算してみます。
>>> from celery import group, chord
>>> from proj.tasks import add, mul, xsum
>>> chord((add.s(1, 2), mul.s(4, 5)), xsum.s())().get()
23
ログファイルを見ると、addとmulが同時刻に実行開始。
双方の結果が得られた後sumが実行されているようです。
2024-12-26 15:00:12,303 - 8066e09b-3348-4551-bb28-ef286a298b64 - proj.tasks.add - proj.tasks - INFO - Add: 1 + 2 = 3
2024-12-26 15:00:12,303 - 18e86651-504b-4232-a762-790f9676d75e - proj.tasks.mul - proj.tasks - INFO - Mul: 4 + 5 = 20
2024-12-26 15:00:12,807 - 0b0b58d8-9356-4339-8d7d-7811a7976f49 - proj.tasks.xsum - proj.tasks - INFO - Sum: [3, 20]
ファイルをアップロードしつつ画像解析。
アップロードと解析が完了するのを待って結果をデータベースに登録。
といった処理が簡単に実装できそうです。
- 関連記事
-
- Celery モニタリングツール flower 2.0のインストールと表示内容
- Celery 一定時間ごとに処理を繰り返す(beat_schedule)
- Celery 異なるタスクを並列で実行し、結果を異なるタスクに渡して実行する
- Celery 5.4 ログの出力について
- Celery 5.4 接続情報を設定ファイルに分離する
コメント