python - 我应该等待 Google App Engine 请求中的每个 ndb.Model.put_async() 吗?

标签 python google-app-engine google-cloud-datastore app-engine-ndb

我不确定如何在 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()

From the docs :

在此示例(以及您的代码)中,调用 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/

相关文章:

javascript - Google 应用引擎授权返回 null

mysql - 如何优化我的 Google Cloud SQL (MySQL) 数据库以与 API 结合使用

python - 我的本地 App Engine 数据存储在哪里?

python - 使用 Pandas 绘制多索引表中的特定列

python - 根据外键选择在 django-admin 中填充值

python - 使用 Scipy 的多处理大卷积没有加速

python - Barabasi-Albert模型的度分布

java - 用GAE打包其他项目

python - Google App Engine 上顺序插入的事务冲突。为什么?

google-app-engine - 在 Google App Engine 中,Model.get(key) 和 Model.get_by_key_name(key_names) 有什么区别?