Armazenamento de dados em nuvem: maneiras de evitar condições de corrida

Eu tenho muitas visualizações manipulando entidades do mesmo tipo:

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()
    ...

Obviamente, isso é propenso a erros devido a possíveis condições de corrida (últimas vitórias):

view1 lê dados completos da entidade do usuário (x = Nenhum, y = Nenhum)view2 lê dados completos da entidade do usuário (x = Nenhum, y = Nenhum)view1user.x = 1 (x = 1, y = Nenhum)view2user.y = 2 (x = Nenhum, y = 2)view1user.put() (x = 1, y = Nenhum)view2user.put() (x = Nenhum, y = 2)

Quais são as melhores maneiras de corrigir isso e qual comportamento é considerado mais decente? Transações (uma das solicitações falhará, tudo bem)?

questionAnswers(1)

yourAnswerToTheQuestion