我有一个POST
调用几个小任务的方法。这些 tasklet 中确实有 yield,x.put_async()
我的代码中确实有一些。所以我不希望它在所有异步内容完成之前返回。所以我装饰了我所有的小任务,它们只是用@ndb.tasklet
. 此外,除了我的POST
方法之外,我还有:
@ndb.toplevel
def post(self):
但是,在文档中它指出:
但是如果一个处理方法使用了yield,那么该方法仍然需要包装在另一个装饰器中,@ndb.synctasklet;否则,它将在 yield 处停止执行并且不会完成。
确实,我的方法有效果。它已经包含在@ndb.tasklet 中。我是用@ndb.synctasklet 替换它还是同时使用两者(如果是这样,我将如何同时使用两者)?
另外,请参阅此线程,它具有一定的相关性。我也注意到一个问题,即我的请求将返回而没有任何输出,但无法重现。它每 15 分钟左右持续使用一次。我app = ndb.toplevel(webapp2.WSGIApplication([..])
只有,但现在我已经添加@ndb.toplevel
到主要POST
方法中,但问题仍然存在。
我应该把@ndb.tasklet
刚刚的方法放在上面put_async()
吗?(为了安全起见,我应该把它放在每种方法之上吗?这样做有什么缺点?)