【发布时间】:2020-12-14 08:04:17
【问题描述】:
在我的 python 应用程序中,通过 Web API 调用的函数正在向 NDB 数据存储表 sd 添加新条目。然后它更新表 cmpgn 中的当前条目以将引用附加到 sd 中的新条目。代码很简单:
sd = SendData(data=json_data)
sd.put()
cmpgn.send_data.append(sd.key)
cmpgn.put()
但是,对于 sd 中大约 50 个条目中的 1 个,缺少 cmpgn 中的引用。我在日志中没有发现任何错误。这种行为的原因可能是什么?
是否有可能在最后一个函数调用完成之前再次调用该函数以获得新的 sd 条目?
此应用仍在 Python 2.7 中运行。这会是个问题吗?迁移到 Python 3.x 会改变这种行为吗?
还有其他建议吗? Cloud Platform 中是否有工具可以分析行为?
【问题讨论】:
-
查看数据存储事务以获得解决方案。您可能几乎同时有 2 个 API 调用,其中一个会覆盖另一个。
-
非常感谢@gaefan。我想你搞定了。我最终使用了 threading.Lock() 因为我的 ndb 模型没有使用祖先查询。我认为只要我不在其他任何地方写 cmpgn.send_data,这也应该有效。
-
斯特凡,不,那行不通。您需要使用事务。
标签: python google-app-engine google-cloud-datastore app-engine-ndb