MongoDB Найти проблему с многопроцестринским использованием
Вопрос
Я использую 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, чтобы избежать получения такого рода дубликатов.