proglog

主にプログラミングに関する断片的メモ

flaskでタスクキューを使ってみるメモ

ついこの間ヴァージョンアップされた、gae 1.4.3

動機としては、

  • 外部のwebサービスを利用する30秒ルールに引っかかりそうなタスクを分割したい
  • cronの1分間隔では長すぎる

TaskQueueは、cronのきめ細かい版という感じ。
urlでタスクを指定するのも同じ。
getもpostも可能

基本的な使い方は、

  1. 失敗した時のリトライ方法なんかを設定したQueueを作る
  2. url(handler)などを指定してTaskを作る
  3. QueueTaskを登録する
  4. 後は放っておいてリターン(今回は)

Flaskを使って試してみる。
タスクの追加順をキーに、タスクの実行日時をバリューにしてmemcacheに追加して、後で確認というもの。
タスク中に適当に例外を投げてリトライの具合も確認。
ソースは以下のような感じ。

taskqueue.Taskの引き数countdownが、キューに入ってから実行までのウエイトっぽい。
だとすると、連続して同じwebサービスをコールする時の時間調整に使える。

独自のキューの設定に名前を付けてQueueを生成している。
そのファイル(queue.yaml)

  • タスクは1秒間に一つ。countdownで実行開始時間が来ても、動いているタスクがこれが効いてくれる、はず?
  • bucket_sizeというのは、どうもドカンといきなりキューにタスクが沢山詰め込まれた時、rateの現界を越えて最大いくつ一緒に走らせるかとかそんな感じらしい。ここでは外のサービスを使うのであくまで1。
  • max_concurrent_requestsは、キューそのものが同時にいくつ走るかとかそんな感じ。cronからゆっくり使うので今回は無視。
  • リトライ回数は2回

なんとなくうまくいってる感じ。
これで/enqueueをcronで定期的に呼び出せば、いいか。