Celery:分散タスクキュー

目次
Pythonにおける非同期処理基盤:Celeryの概要と基本的な使い方
Webアプリケーションを運用していると、 「時間のかかる処理をバックグラウンドで実行したい」 「ユーザー操作とは切り離して処理を実行したい」 といった要件が必ず出てきます。
そのような場面で広く利用されているのが Celery(セロリ) です。
Celeryは、Pythonで実装された 分散タスクキュー(Distributed Task Queue)であり、 非同期処理や定期実行処理を安全かつ効率的に管理できます。
本記事では、Celeryの基本概念から、 最低限必要な構成要素、 基本コマンドまでを整理します。
Celeryとは何か
Celeryは、タスク(処理)をキューに登録し、 ワーカープロセスがそれを取り出して実行する仕組みです。
通常のWebアプリケーションでは、 ユーザーのリクエストを受けたら即座に処理を返します。 しかし、
- 大量データの集計
- メールの一斉送信
- 画像変換処理
- 外部APIとの重い通信処理
といった時間のかかる処理を同期的に行うと、 レスポンスが遅くなり、ユーザー体験が悪化します。
Celeryを使うことで、 これらの処理をバックグラウンドで実行し、 Webアプリケーションの応答性を保つことができます。
Celeryの基本構成
Celeryは主に以下の要素で構成されます。
- Producer(アプリ側):タスクを登録する側
- Broker(ブローカー):タスクを保管するキュー
- Worker(ワーカー):タスクを実行するプロセス
一般的な構成では、 Brokerとして Redis や RabbitMQ を使用します。
Celeryが適している場面
- Webアプリケーションの非同期処理
- メール配信処理
- レポート生成バッチ
- APIポーリング処理
- 分散処理が必要な大量計算
特にDjangoやFlaskなどのPython製Webフレームワークと相性が良く、 実運用でも広く利用されています。
Celeryの基本インストール
まず、Python環境にCeleryをインストールします。
$ pip install celery
Redisを利用する場合は、Redisクライアントも必要です。
$ pip install redis
Redisサーバーが未インストールの場合は以下のように導入します。
Debian / Ubuntu系
# apt install redis-server
Fedora / Rocky Linux系
# dnf install redis最小構成のCeleryアプリ例
from celery import Celery
app = Celery(
"sample",
broker="redis://localhost:6379/0"
)
@app.task
def add(x, y):
return x + yワーカーの起動
Celeryワーカーを起動します。
$ celery -A tasks worker --loglevel=infoこれにより、 タスクキューを監視するワーカープロセスが起動します。
タスクの実行
Pythonシェルからタスクを実行できます。
$ python
>>> from tasks import add
>>> add.delay(4, 5).delay() を使うことで、 非同期タスクとしてキューに登録されます。
ワーカー側で処理が実行され、 結果が返されます。
定期実行(Celery Beat)
Celeryには定期実行機能もあります。 これを実現するのが Celery Beat です。
Beatを利用することで、 cronのような時間ベースのタスク管理が可能になります。
$ celery -A tasks beat --loglevel=info
ワーカーとBeatを同時に起動する構成が一般的です。
Celeryのメリット
- 非同期処理に最適
- 分散処理が可能
- Webアプリと密接に連携できる
- スケールアウト可能
- 再試行・リトライ制御が可能
単なる定期実行ツールではなく、 アプリケーションレベルの処理基盤として利用できます。
Celeryの注意点
- Brokerが必要(Redis/RabbitMQなど)
- 構成がやや複雑
- インフラ設計が必要
- メモリ消費が大きくなる場合がある
小規模サーバーで単純な定期実行だけであれば、 cronやsystemd timerの方がシンプルな場合もあります。
Celeryは、 「アプリケーション連動の非同期処理」が必要な場合に 最も力を発揮します。
cron・systemd timerとの違い
- cron: 単純な時間ベースの定期実行
- systemd timer: systemd統合型スケジューリング
- Celery: 分散・非同期処理基盤
Celeryは「時間実行ツール」ではなく、 アプリケーション処理基盤として理解するのが重要です。
まとめ
Celeryは、Python環境における強力な分散タスクキューです。
Webアプリケーションの応答性を維持しながら、 バックグラウンド処理を安全に実行できます。
小規模な定期実行であればcron、 systemd環境ではtimer、 アプリケーション連動や分散処理が必要であればCelery、 と用途に応じた使い分けが重要です。
Linux環境での自動化戦略を考える上で、 Celeryは非常に重要な選択肢の一つと言えるでしょう。





