たんたんめん日記

ソシャゲ関連のなんでもやさん備忘録

【Celery】Celery 結果をmysqlに格納する編

ソース一式はコチラ https://github.com/dnond/celery_scraping

下準備

CeleryはSQLAlchemyをサポートしているので、インストールします。

# pip install SQLAlchemy

あと、mysql本体もインストールしておく必要があります。

RESULT_BACKENDの設定

参考:http://docs.celeryproject.org/en/latest/configuration.html#database-backend-settings

config.pyのCELERY_RESULT_BACKENDの設定を変更します。

CELERY_RESULT_BACKEND = "database"
CELERY_RESULT_DBURI = "mysql://user:password@host/dbname"

# echo enables verbose logging from SQLAlchemy.
CELERY_RESULT_ENGINE_OPTIONS = {"echo": True}

CELERY_RESULT_ENGINE_OPTIONS = {"echo": True} は動作確認のために入れてみました。
パフォーマンスが悪くなるので、本番では外したほうが良さそうです。
詳細はコチラ


確認

タスクを追加して動かしてみます。

mysqlの該当databaseを覗いてみると、自動的にceleryのテーブルが作成されています。

f:id:dnond:20130731144709p:plain

tableの中身を見ると、ちゃんと結果が格納されているようです。

f:id:dnond:20130731144714p:plain

タスクの追加時に返されるtask_idをどこかのテーブルに格納しておき、この結果テーブルとjoinすることで各種の処理も行うことが出来そうです。


BROKERにmysql

Resultではなく、BROKERにmysqlを使うのは、 https://groups.google.com/d/msg/celery-users/WAxM-mTKhMM/1Uz3sEDLF38J
上の記事を見るとあまりオススメではないようです。


【Celery】Celery 要件と環境編
【Celery】Celery インストール、Worker立ち上げ編
【Celery】Celery アプリ・タスクの定義編
【Celery】Celery タスクの追加とflower編
【Celery】Celery Task Status編
【Celery】Celery 結果をmysqlに格納する編
【Celery】Celery 複数サーバーでworkerを立ち上げてみる編
【Celery】Celery 感想編