【问题标题】:Asynchronous Tasks异步任务
【发布时间】:2013-09-26 17:43:45
【问题描述】:

我有一个关于 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 上阻塞?

【问题讨论】:

    标签: python google-app-engine asynchronous webapp2


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2015-08-21
      • 1970-01-01
      相关资源
      最近更新 更多