我有很多操作同类实体的视图:
def view1(request, key):
user = ndb.Key(urlsafe=key).get()
user.x = 1
user.put()
...
def view2(request, key):
user = ndb.Key(urlsafe=key).get()
user.y = 2
user.put()
...
显然,由于可能的竞争条件(最后获胜),这很容易出错:
- view1 读取整个用户实体数据(x=None,y=None)
- view2 读取整个用户实体数据(x=None,y=None)
- 视图
user.x = 1
1(x=1,y=无) - 视图
user.y = 2
2(x=无,y=2) - 视图
user.put()
1(x=1,y=无) - 视图
user.put()
2(x=无,y=2)
解决此问题的最佳方法是什么?什么行为被认为是最体面的?交易(其中一个请求会失败,可以吗)?