【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のテーブルが作成されています。
tableの中身を見ると、ちゃんと結果が格納されているようです。
タスクの追加時に返される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 感想編