たんたんめん日記

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

【Celery】Celery タスクの追加とflower編

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

タスクの実行確認

タスクを追加するコードです。

task_scrape.apply_async()でタスクを追加しています。

# -*- coding: utf-8 -*-
import sys
from MyApp import MyApp

## デフォルト値
target_url = 'http://www.yahoo.co.jp/'
countdown = 60

## 引数の取得
argvs = sys.argv
argc = len(argvs)
           
if (argc == 3):
    target_url = argvs[1]
    if argvs[2].isdigit():
        countdown = int( argvs[2] )
        
######
## 実行
if __name__ == '__main__':
    cMyApp = MyApp()
    cAsyncResult = cMyApp.task_scrape.apply_async( (target_url,), countdown=60)
    print "task_id:%s" % (cAsyncResult.id)

タスクを追加します。 追加した結果は、AsyncResultとして返されます。

$ python ./add_task_2_myapp.py 
task_id:aac9a6f1-8d54-4ac9-972f-4cfe37864a19

60秒後、MyApp.task_scrapeが実行され、www.yahoo.co.jpからtitleタグを拾ってきて/tmp/scrape_resultに追記されるはず、です。


flower

http://docs.celeryproject.org/en/latest/userguide/monitoring.html#flower-real-time-celery-web-monitor

かなり高機能なTask管理ツールです。
こいつがあるという理由でCeleryを使っても良いかもしれません。

インストール

# pip install flower

こんだけ。

起動

今回はRedisをBROKERに使っているので、起動時に指定しておきます。

# celery flower --broker=redis://localhost:6379/0  --port=5555

詳しくはコチラ

表示

ブラウザから http://インストールしたサーバーのIP:5555/ にアクセスします。

f:id:dnond:20130731143614p:plain

なぜかメニューバーが2つ表示されていますが‥

/etc/sysconfig/celerydで3つのworkerの起動を指定 したので、それが反映されています。
どのworkerがいくつのタスクを処理したのかもGUIで分かりやすく表示してくれます。

f:id:dnond:20130731143618p:plain

タスクを追加すると、flowerのタスク管理ページで確認出来ます。

各タスクを選択すると、実行日時や、引数、実行結果、どのworkerで実行されたのか、等の詳細を得ることが出来ます。


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