defaultタスクキューに処理を登録
from google.appengine.api.labs import taskqueue
taskqueue.add(url='/job, params={'param1': "batch", 'mode': 'change' })
/jobにparam1とmodeという変数をPostして処理させる。これが基本形。
タスクキューの無限リトライを防止
from google.appengine.api.labs import taskqueue
import logging
class Job(webapp.RequestHandler):
def post(self):
if( int(self.request.headers.environ['HTTP_X_APPENGINE_TASKRETRYCOUNT']) > 3):
logging.error('jog retry error(over 3 times)')
return
...処理を記述
太字部分を追加すると、3回リトライしてダメだったらエラーログを残して処理を終了する。
デフォルト以外の設定でタスクを処理
デフォルト以外のキューを設定すると、実行頻度とか、一度に実行するタスクの数を変えられる。
queue.yamlに以下のように設定
queue:
- name: task_per_minute
rate: 1/m
bucket_size: 1
- name: speed_queue
rate: 5/s
rateの1/mは一分あたり一回実行の意味。5/sは秒あたり5回実行。bucket_sizeは、一度に並列処理する数。1だとひとつひとつ処理するようだ。 5/hと書いて、だいたい12分間隔で実行してくれるのかは未確認。
上記のように設定した、default以外のキューにタスクを投入するときはこう書く。
from google.appengine.api.labs import taskqueue
mytask = taskqueue.Queue('task_per_minute')
task = taskqueue.Task(url='/job, params={'param1': "batch", 'mode': 'change' })
mytask .add(task)
追記)上記の方法だと、「リトライエラー」が無限に発生する、という自体に陥ることがあった。色々調べた結果、queue.yamlにリトライ回数を記述するのが確実なようだ。
queue:
- name: task_per_minute
rate: 1/m
bucket_size: 1
retry_parameters:
task_retry_limit: 3
- name: speed_queue
rate: 5/s
retry_parameters:
task_retry_limit: 3
retry_parametersのtask_retry_limitが最大リトライ数。
その他のパラメータについては、googleの公式ページを参照。
google公式ページ queue設定方法:
python task queue configuration - google app engine