「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)
Pingback: Google App EngineでRSSをツイートするbotをつくるまで – Yuyak