我使用 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 实现队列,这将锁定文档不被多个进程读取?
谢谢。