MongoDB Найти проблему с многопроцестринским использованием

StackOverflow https://stackoverflow.com/questions/4738296

  •  12-10-2019
  •  | 
  •  

Вопрос

Я использую Python 2.6.6, Pimongo 1.9, Mongodb 1.6.5, Ubuntu 10.10

У меня есть странная проблема с командой FindandModify.

У меня есть два идентичных процесса, работающих одновременно. Они получают записи от DB с FindandModify (реализует какую -то очередь).

Итак, чтобы сделать это только один процесс, получите запись, я делаю это:

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

Это работает так:

1 Использование процесса FindAndModify, чтобы получить работу 2 Использование процесса FindAndModify, чтобы получить задание 1, выполнить задание и сохранить результат 2, выполнить задание и сохранить результат

Таким образом, процесс получите запись со статусом «загружен» и измените ее на «анализ». И если эта операция является атомным вторым процессом, не должен видеть эту запись, потому что она не удовлетворяет запросу.

Но иногда два процесса получают одну и ту же запись одновременно, и это проблема.

Может ли кто -нибудь сказать, почему это происходит и как я могу внедрить очередь с MongoDB, который будет блокировать документы от чтения более чем на одном процессе?

Спасибо.

Это было полезно?

Решение

В то время как пытался воспроизвести эту ошибку в автономном сценарии, обнаружил, что проблема не была в MongoDB. MongoDB работает, как сказано в руководстве, поэтому вопрос теперь закрыт.

Для Thous, который нашел ту же ошибку - не забудьте проверить другие потоки/процессы для изменения данных очереди во время выполнения.

Другие советы

Вы можете использовать Snapshot = True Flag, чтобы избежать получения такого рода дубликатов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top