0

我有一个关于 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)

我只有一个前端实例,其中许多任务同时运行。像这样把它变成一个tasklet有意义吗?

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 上阻塞?

4

1 回答 1

1

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

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

于 2013-09-26T23:01:31.563 回答