使用 Google App Enginendb
时,我是否需要担心在同一函数中混合同步和异步放置操作?
例如,假设我有一些这样的代码:
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
标志(?还是存在竞争条件,因为异步放置可能会在同步放置之后完成?
不,数据存储不会为您处理此问题。
即使使用同步放置,来自不同线程的调用也可以相互覆盖。
我建议您阅读一些有关交易的信息,以及何时以及为什么有帮助。
有关示例代码和实用解决方案,您可以查看 Dan McGrath 对"云数据存储:避免竞争条件的方法"问题的回复。