Python Django:此块中是否出现竞争条件?

Python Django:此块中是否出现竞争条件?,python,django,google-app-engine,django-nonrel,google-cloud-datastore,Python,Django,Google App Engine,Django Nonrel,Google Cloud Datastore,我使用的是django nonrel和django rest框架,我有一个视图方法,它将数字附加到数组中 def add_number(self, request, *args, **kargs): row = self.get_object() # Gets the row from DB row.numbers.append(request.POST.get('number')) # Modifies the column

我使用的是
django nonrel
django rest框架
,我有一个视图方法,它将数字附加到数组中

def add_number(self, request, *args, **kargs):
    row = self.get_object()                          # Gets the row from DB
    row.numbers.append(request.POST.get('number'))   # Modifies the column
    row.save()                                       # Save to DB
    serializer = self.get_serializer(row)
    return Response(serializer.data)
如果另一个客户同时尝试添加他的号码,是否有可能一个号码没有保存?

额外信息


这是在
googleappengine
中运行的,带有
django-nonrel@1.5
django数据库索引器
谷歌云数据存储
作为数据库。
@transaction.commit\u on\u success
解决了吗?(我相信不会)

但是交易是网络规模的吗?无论如何,事务无法解决这个问题,因为您没有在正在编辑的行上获取锁。我对NoSQL不太熟悉,但为了防止竞争条件,通常需要在单个事务中使用lock-get-edit-save工作流。目前,您肯定错过了锁。(如果您可以使用单个
UPDATE
语句,那么肯定可以避免争用条件。)也许这对您很有效,因为没有
UPDATE
可以将其追加到数组/列中。有一些递增或递减的方法。还有Ale,这个案例适用于
NoSQL
数据库,所以我不确定这些解决方案是否适用于
GoogleAppEngine
。事实上,我不知道如何让Erlang在GAE上工作。我建议您查看使用memcache创建锁的CAS操作。您不会根据您在实现get_number时使用的标准/键来说明这一点的重要性。您可能会发现事务可以解决问题,但django似乎抽象了一些东西,而且从未看过django,因此无法进一步评论。