我使用Python 2.6.6,Pymongo 1.9,MongoDB 1.6.5,Ubuntu 10.10

我对FindandModify命令有奇怪的问题。

我同时有两个相同的过程。他们从DB中获取带有FindandModify的记录(实现某种队列)。

因此,只有一个过程获得记录,我要这样做:

find_and_modify({query:{"status":"loaded"},update:{"$set": {"status":"analyzing"}}) 

这是如此:

1流程使用findandModify获取工作2流程使用findandModify获取工作1过程并保存结果2流程做出工作并保存结果

因此,流程获取具有“加载”状态的记录,并将其更改为“分析”。如果此操作是原子的第二个过程,则不应看到此记录,因为它不满足查询。

但是有时两个过程同时获得相同的记录,这是问题。

谁能说明为什么会发生这种情况,以及我如何用MongoDB实施队列,这将锁定文档的阅读量超过一个过程?

谢谢。

有帮助吗?

解决方案

在试图在独立脚本中重现此错误时,发现问题不是在MongoDB中。 MongoDB正如手册中所述的,因此问题现在已经结束。

对于发现相同错误的Thous-不要忘记检查其他线程/进程在运行时修改队列数据。

其他提示

您可以使用快照= true标志来避免获得此类重复。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top