【问题标题】:Mongodb FindAndModify problem with multiprocess useMongodb FindAndModify 多进程使用问题
【发布时间】:2011-06-11 22:01:57
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: python mongodb queue pymongo


    【解决方案1】:

    尝试在独立脚本中重现此错误时,发现问题不在 MongoDB 中。 MongoDB 的工作原理如手册中所述,因此问题现已结束。

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

    【讨论】:

      【解决方案2】:

      您可以使用 snapshot=True 标志来避免此类重复。

      【讨论】:

        猜你喜欢
        • 2016-02-10
        • 2017-03-11
        • 2017-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-30
        • 2015-11-18
        • 2020-12-07
        相关资源
        最近更新 更多