使用Google App Engine ndb
时,我是否需要担心在同一函数中混合同步和异步put操作?
例如假设我有一些这样的代码:
class Entity(ndb.Model):
some_flag = ndb.BooleanProperty()
def set_flag():
ent=Entity()
ent.some_flag = False
ent.put_async()
ent.some_flag = True
ent.put()
该数据存储区是否负责确保在同步写入之前应用所有未决的异步写入(这样,在运行set_flag
之后,可以确保该标志为True
)?还是存在竞争条件,因为异步放置可能会在同步放置之后完成?
答案 0 :(得分:2)
否,数据存储区不会为您处理此事。
即使使用同步puts,来自不同线程的调用也可以彼此覆盖。
我建议您阅读一些有关交易的信息,以及什么时候以及为什么有帮助。
答案 1 :(得分:0)
有关示例代码和实用解决方案,您可以查看Dan McGrath对“ Cloud Datastore:避免争用情况的方法” question的答复。