我对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?
答案 0 :(得分:1)
NDB为每个请求创建一个新的上下文,所以不,没有优势。
<强>详细信息:强>
ndb.toplevel
和ndb.synctasklet
都创建了一个新的上下文(它将负责聚合RPC请求并将它们批处理)。 toplevel
实际上是synctasklet
,但它会创建一个新的上下文来使用。