Google App Engine用フレームワークKayでTaskQueueを簡単に扱う

Google App Engine用フレームワークKayでTaskQueueを簡単に扱う | 山本隆の開発日誌」より。


Kay でも deferred を使おう – Kays daddy」に、Kayでdeferredを使う方法が紹介されていました。

Google App EngineフレームワークKayでは、deferredを使うことで、TaskQueueを簡単に扱うことができます。

まず初期設定ですが、元の記事ではapp.yamlとurls.pyを編集するように書かれていました。

現在のKayでは、app.yamlもurls.pyも初期状態でdeferredの設定が行われており、追加する必要はありませんでした。

deferredを使うには、deferred.defer()で関数と引数を指定します。

myapp/views.py

from google.appengine.ext import deferred
def do_something_later(foo):
#バックグラウンドで行う処理
import logging
logging.debug(keys)

def index(request):
#バックグラウンドで行う処理を登録する
deferred.defer(do_something_later, 'foo')

deferは次のように定義されています。

def defer(obj, *args, **kwargs):

objは実行可能なオブジェクト、argsとkwargsはobjの引数に使用されます。

引数の「_countdown」「_eta」「_name」「_transactional」「_url」「_queue」は、
google.appengine.api.labs.taskqueue.Taskクラスの引数になります。

(参照:The Task Class – Google App Engine – Google Code)

def index(request):
deferred.defer(do_something_later, 20, _queue="foo", _countdown=60)