0
0

PythonのCeleryを試してみた

Posted at

これは何?

  • pythonのCeleryパッケージをローカルにて動かしてみます。
  • 今回はDockerのRedisを使用し、Celeryが動作することを確認できました。

Celeryとは

Celeryのイメージ

Celery.drawio.png

  • Task
    • Celeryでの実行のために作成されるタスク。
  • Broker
    • 作成されたタスクの置き場所。タスクはWorkerに実行されるまで、ここで待機する。
  • Worker
    • Brokerからタスクを持ってきて実行する。Celeryのインスタンスが役割を担う。
  • Backend
    • 実行されたタスクの結果を保存する場所。

図にもある通り、Celeryを実行するWorkerはTaskを作成するAppとは別になります。そのため、Appと分けた非同期処理を簡単に実現することができます。

Celeryの実装

今回は、brokerとBackendにRedisを利用します。

以下の4つをそれぞれDockerとして作成します。

  • Taskを作成する元のpython Application
  • Broker、BackendとなるRedis
  • Celery workerを実行するpython環境
  • Celeryのモニターを行う flower を実行するpython環境

実際に試してみる

Githubディレクトリからコードをクローンし、以下を実行します。

// dockerを立ち上げ
docker compose up --build

// python実行コンテナに入る
docker exec -it [container ID] bash

// python実行コンテナでTaskを実行してみる
python create_first_task.py

Flowerでworkerの確認ができます。
タスクの詳細も確認可能です。

http://localhost:5555/

スクリーンショット 2024-08-24 22.12.52.png


続いて非同期処理していることも確認してみます。

以下のタスクは10秒sleepして returnする関数を2回実行します。

python create_multi_task.py

// stdout
First task added to queue
Second task added to queue

実行してすぐにFlowerを見ると、タスクが Active 状態となっており、 Succeed になっていないことがわかります。

スクリーンショット 2024-08-24 23.55.50.png

今回はCeleryを使ってみることがゴールのため、ここまでとしますが実際には、Celeryの様々な機能を追加していくことができます。
Celeryは業務でも使用するため、今後より詳細を調べる時間も取れればと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0