我用的是python 2.6.6,pymongo 1.9,mongodb 1.6.5,Ubuntu 10.10
我在使用FindAndModify命令时遇到了奇怪的问题。
我有两个相同的进程同时运行。它们使用FindAndModify从数据库中获取记录(实现某种队列)。
因此,为了只有一个进程得到记录,我这样做:
find_and_modify({query:{"status":"loaded"},update:{"$set": {"status":"analyzing"}}) 它是这样工作的:
1进程使用findAndModify获取作业2进程使用findAndModify获取作业1进程创建作业并保存结果2进程创建作业并保存结果
因此进程获取状态为“已加载”的记录,并将其更改为“正在分析”。如果这个操作是原子的,那么第二个进程应该看不到这个记录,因为它不能满足查询。
但有时两个进程同时得到一个相同的记录,这就是问题所在。
谁能告诉我为什么会发生这种情况,以及我如何使用mongodb实现queue,它将锁定多个进程正在读取的文档?
谢谢。
发布于 2011-01-20 17:19:48
当我尝试在独立脚本中重现此错误时,发现问题不在MongoDB中。MongoDB的工作原理和手册中所说的一样,所以问题现在结束了。
对于发现相同错误的用户,不要忘记在运行时检查其他线程/进程以修改队列数据。
发布于 2011-10-29 09:54:27
您可以使用snapshot=True标志来避免获取此类副本。
https://stackoverflow.com/questions/4738296
复制相似问题