Go for it!

モーターサイクルと自転車とキャンプの日々。

AppEngineでQueueを分ける

AppEngineをちょっとお勉強。

queue.yamlにキューの定義を複数書いておくと、時間あたりの実行数やバケットの数(バケットって何?)を制御することが出来る。例えばWebクローラは1秒に5個、画像変換ジョブは1時間に30個などと制限出来る。

[ad#text_only_square]

で、ちょっと調べてGoogleのリファレンスを読んでみたもののよく理解できなかったので、ググッて見つけたサイトで学習。悩んでいたのがあほらしいくらいに簡単だった。

要点その1 queue.yamlでキューを定義する。タスクの要件に合わせてお好きなように。以下の例ではcrawlerキューは1分間に2回のタスクが実行できる。

[code lang=“ruby”] queue: - name: default rate: 1/s - name: crawler rate: 2/m [/code]

要点その2 キュークラスのインスタンスを作って、そこにタスククラスを渡してあげる。実際のコードは以下のような感じ。

[code lang=“python”] from google.appengine.api.labs import taskqueue

crawler_task = taskqueue.Queue(‘crawler’) (略) url=‘http://www.google.com/’ next_task = taskqueue.Task(url=‘/_task/crawler’, params={‘url’:url}) crawler_task.add(next_task) [/code]

これでcrawlerキューにurl=‘/_task/crawler’, params={‘url’:url}が渡されるという仕組みです。タスクの実行計画はキュークラスで良きに計らってくれます。

投入するタスクとキューの実行スパンに大きな乖離があると、タスクが山積みになっていつまで経っても処理されないといった事態が起こるかも知れません。

[ad#text_wide]