У меня есть много представлений, манипулирующих сущностями одного типа:
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)
- вид1
user.x = 1
(x=1, y=нет) - вид2
user.y = 2
(х=нет, у=2) - вид1
user.put()
(x=1, y=нет) - вид2
user.put()
(х=нет, у=2)
Каковы наилучшие способы исправить это и какое поведение считается наиболее приличным? Транзакции (один из запросов не пройдет, это нормально)?