首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多进程使用的Mongodb FindAndModify问题

多进程使用的Mongodb FindAndModify问题
EN

Stack Overflow用户
提问于 2011-01-20 01:06:12
回答 2查看 1.1K关注 0票数 2

我用的是python 2.6.6,pymongo 1.9,mongodb 1.6.5,Ubuntu 10.10

我在使用FindAndModify命令时遇到了奇怪的问题。

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

因此,为了只有一个进程得到记录,我这样做:

代码语言:javascript
复制
find_and_modify({query:{"status":"loaded"},update:{"$set": {"status":"analyzing"}}) 

它是这样工作的:

1进程使用findAndModify获取作业2进程使用findAndModify获取作业1进程创建作业并保存结果2进程创建作业并保存结果

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

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

谁能告诉我为什么会发生这种情况,以及我如何使用mongodb实现queue,它将锁定多个进程正在读取的文档?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-20 17:19:48

当我尝试在独立脚本中重现此错误时,发现问题不在MongoDB中。MongoDB的工作原理和手册中所说的一样,所以问题现在结束了。

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

票数 1
EN

Stack Overflow用户

发布于 2011-10-29 09:54:27

您可以使用snapshot=True标志来避免获取此类副本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4738296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档