gpt4 book ai didi

django - 如何使用 mongoengine 避免竞争条件(对 ListFields 和 DictFields 进行原子更改)

转载 作者:可可西里 更新时间:2023-11-01 10:33:09 26 4
gpt4 key购买 nike

我正在使用 mongoengine,似乎遇到了一些潜在的竞争条件事件。作为一个简单的例子,我们有这样的代码

def changeModel(newitemL, olditemD)
model.randomList.append(newitemL)
model.randomDict.pop(olditemD,None)
model.save()

因此,如果两个用户尝试对不同的项目执行此操作,那么有时它只会显示 1 个用户对已保存模型的更改。有没有一种方法可以让我自动更改 ListFields 和 DictFields 来避免这种情况?

最佳答案

与其进行保存,不如进行更新,例如:

model.update(push__randomList=newitemL, pop__randomDict)

这样你只会原子地影响那些元素。

目前,mongoengine 在对列表/字典字段进行保存时是简单而天真的,例如:

model.randomList.append(newitemL)

# Converts to a set of the whole list:
model.update(set__randomList=model.randomList)

关于django - 如何使用 mongoengine 避免竞争条件(对 ListFields 和 DictFields 进行原子更改),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17686753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com