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]



ファイルをアップロードしつつ画像解析。
アップロードと解析が完了するのを待って結果をデータベースに登録。
といった処理が簡単に実装できそうです。

関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ