Celeryで使われる broker
と backend
の役割について解説します。
Brokerとは?
broker
は、タスクキューを管理するためのメッセージブローカーの役割を果たします。タスクを送信したり、ワーカーがそのタスクを取得して処理するのに使用されます。Celeryは複数のメッセージブローカーをサポートしており、一般的には以下のものが使われます。
- Redis: 高速でシンプルなキーバリューストア。
- RabbitMQ: 高性能なメッセージブローカー。
- Amazon SQS: AWSのキューベースのメッセージングサービス。
broker
URLは、メッセージブローカーへの接続情報を含みます。例えば、redis://redis:6379/0
は、Redisサーバーがホスト redis
上でポート 6379
で動作し、データベースインデックス 0
を使用することを示しています。
app = Celery('tasks', broker='redis://redis:6379/0')
Backendとは?
backend は、タスクの結果を保存し、後で結果を取得するために使用されます。タスクが非同期に実行されると、その結果をどこかに保存しておく必要があります。これを行うのが結果バックエンドです。Celeryは以下のような結果バックエンドをサポートしています。
Redis: 結果を保存するのに適しています。
Database: SQLAlchemyやDjango ORMを使用してデータベースに結果を保存できます。
Amazon S3: S3バケットに結果を保存します。
RPC: リモートプロシージャコールのバックエンド。
backend URLは、結果バックエンドへの接続情報を含みます。例えば、redis://redis:6379/1 は、Redisサーバーがホスト redis 上でポート 6379 で動作し、データベースインデックス 1 を使用することを示しています。
app = Celery('tasks', broker='redis://redis:6379/0', backend='redis://redis:6379/1')
まとめ
- Broker: タスクの送信と取得を管理するメッセージブローカー。
- Backend: 非同期タスクの結果を保存するストレージシステム。
これらを適切に設定することで、Celeryを使用して非同期タスクを効率的に管理し、実行できます。