使用多进程的Mongodb FindAndModify问题

时间:2011-01-19 17:06:12

标签: python mongodb queue pymongo

我使用python 2.6.6,pymongo 1.9,mongodb 1.6.5,Ubuntu 10.10

我在FindAndModify命令中遇到了奇怪的问题。

我有两个相同的进程同时运行。他们使用FindAndModify从db获取记录(实现某种队列)。

所以为了让只有一个进程获得记录,我这样做:

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

这样做:

1进程使用findAndModify来获取工作 2进程使用findAndModify来获取工作 1个过程进行工作并保存结果 2流程制作工作并保存结果

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

但有时两个进程同时获得一条相同的记录,这就是问题所在。

任何人都可以告诉它为什么会发生以及我如何使用mongodb实现队列,这将阻止文件被多个进程读取?

感谢。

2 个答案:

答案 0 :(得分:1)

虽然尝试在独立脚本中重现此错误,但发现问题不在MongoDB中。 MongoDB按照手册中的说法工作,所以问题现在已经关闭。

对于发现相同错误的人 - 不要忘记在运行时检查另一个线程/进程来修改队列数据。

答案 1 :(得分:0)

您可以使用snapshot = True标志来避免获得这些重复项。