メッセージブローカーとしてDockerで起動RabbitMQを使用し、Celeryを使った単純なプログラムが動作するところまでを書く。
内容はほぼ公式ドキュメントの通りだが、DockerのRabbitMQを使うように変えている。
RabbitMQ
# 起動
docker run --rm -d --hostname my-rabbit --name rabbitmq -p 5672:5672 -p 8080:15672 rabbitmq:3-management
# 停止
docker stop rabbitmq
5672が使用するポート。8080(15672)ポートはブラウザから見れる管理画面。(今回はなくてもいい)
ライブラリのインストール
pip install celery
バージョン4.4.2がインストールされた。
プログラムの用意
tasks.py
from celery import Celery
app = Celery('tasks', backend='amqp', broker='amqp://guest:guest@127.0.0.1:5672')
@app.task
def add(x, y):
return x + y
tasks.py
という名前で作成する。
準備ができたら実行する。
celery -A tasks worker --loglevel=info
メッセージの投入、取得
>>> r = add.delay(4,4)
>>> r
<AsyncResult: 8a80f867-c2f4-47f6-b431-665c624f0ec2>
>>> r.ready()
True
>>> r.get()
8
動いていることが確認できた。