异步任务

时间:2013-09-26 17:43:45

标签: python google-app-engine asynchronous webapp2

我对App Engine中的任务架构有疑问。

说我有一个简单的任务:

class MyTask(webapp2.RequestHandler):
    def post(self):
        k = ndb.Key(urlsafe=self.request.get('key'))
        entities = Model.query(ancestor=k).fetch(100)
        for entity in entities:
            entity.something = True
        ndb.put_multi(entities)

我只有一个前端实例,其中许多任务一次运行。把它变成一个像这样的小工具是否有意义?

class MyTask(webapp2.RequestHandler):
    @ndb.synctasklet
    def post(self):
        k = ndb.Key(urlsafe=self.request.get('key'))
        entities = yield Model.query(ancestor=k).fetch_async(100)
        for entity in entities:
            entity.something = True
        yield ndb.put_multi_async(entities)

这是否可能允许收集RPC并以更大批量发送出去?或者它只是像同步版本一样快速运行,阻塞每个RPC?

1 个答案:

答案 0 :(得分:1)

NDB为每个请求创建一个新的上下文,所以不,没有优势。

<强>详细信息: ndb.toplevelndb.synctasklet都创建了一个新的上下文(它将负责聚合RPC请求并将它们批处理)。 toplevel实际上是synctasklet,但它会创建一个新的上下文来使用。