使用deferred库进行后台作业
2009 10 15 09:08 PM 1592次查看
分类:Google App Engine 标签:Google App Engine, Python
然而Google实际上还隐藏了一个deferred库,可以更方便地生成后台任务,详情可看《Background work with the deferred library》。
这个库用起来非常简单,共有3步要做:
- 修改app.yaml,增加一个handler:
或者在builtins里添加一行:- url: /_ah/queue/deferred script: $PYTHON_LIB/google/appengine/ext/deferred/ login: admin
- deferred: on
- 定义要在后台执行的函数,例如:
def do_something_expensive(a, b, c=None): logging.info("Doing something expensive!") # Do your work here
- 用deferred.defer()来调用该函数:
from google.appengine.ext import deferred deferred.defer(do_something_expensive, "Hello, world!", 42, c=True) # 还支持超时和设置队列名等,可用参数包括_countdown、_eta、_name、_transactional、_url和_queue: deferred.defer(do_something_expensive, "Foobie bletch", 12, _countdown=30, _queue="myqueue")
其他的例子大家就去看原文吧,这里只把deferred可以调用的函数的限制列出来:
- 所有的参数都可以被pickle(也就是序列化)。
- 不能调用嵌套函数、嵌套类的方法。
- 不能调用lambda函数。
- 不能调用static函数。
- 不能调用在request handler模块里的方法。
最后,由于task queue有大小限制,当参数大于10k时,这些参数将被保存在一个_DeferredTaskEntity实体里,这会影响调用时间。
0条评论 你不来一发么↓