我不确定如何在 Google App Engine 中处理异步操作。你能帮我处理这段代码吗?
我想异步放置实体:
class Thing(ndb.Model):
pass
entity = Thing()
future = entity.put_async()
# hundred of code lines of other async to parallelize
但我不确定是否应该在处理程序结束之前等待此放置?
我应该完成我的代码以保持数据一致吗?
future.wait()
也许我的问题看起来微不足道,但我想避免意外行为带来的随机错误。我读过https://cloud.google.com/appengine/docs/python/ndb/futureclass但在这里没有找到好的答案。
同样https://cloud.google.com/appengine/docs/python/ndb/async .
最佳答案
您可以使用ndb.toplevel()
在此示例(以及您的代码)中,调用 future.get_result 有点愚蠢:应用程序从不使用 NDB 的结果。该代码只是为了确保请求处理程序在 NDB put 完成之前不会退出;如果请求处理程序退出得太早,则 put 可能永远不会发生。为了方便起见,您可以使用 @ndb.toplevel 装饰请求处理程序。这告诉处理程序在异步请求完成之前不要退出。这反过来又可以让您发送请求而不必担心结果。
您可以将整个 WSGIApplication 指定为 ndb.toplevel。这可确保每个 WSGIApplication 的处理程序在返回之前等待所有异步请求。 (它并不“顶级”所有 WSGIApplication 的处理程序。)
示例:
app = ndb.toplevel(webapp2.WSGIApplication(routes=routes, debug=True))
关于python - 我应该等待 Google App Engine 请求中的每个 ndb.Model.put_async() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32903504/