Я использую python 2.6.6, pymongo 1.9, mongodb 1.6.5, Ubuntu 10.10
У меня странная проблема с командой FindAndModify.
У меня одновременно работают два одинаковых процесса.Они получают записи из базы данных с FindAndModify (реализует какую-то очередь).
Таким образом, чтобы сделать запись только одного процесса, я делаю это:
find_and_modify({query:{"status":"loaded"},update:{"$set": {"status":"analyzing"}})
Это работает так:
1 процесс использует findAndModify, чтобы получить процесс задания 2, использует findAndModifyполучить работу 1 процесс создать работу и сохранить результат 2 процесс выполнить работу и сохранить результат
Таким образом, процесс получает запись со статусом «загружен» и меняет ее на «анализ».И если эта операция атомарная, то второй процесс не должен видеть эту запись, поскольку он не удовлетворяет запросу.
Но иногда два процесса получают одну и ту же запись одновременно, и это проблема.
Может кто-нибудь сказать, почему это происходит и как я могу реализовать очередь с mongodb, которая заблокирует чтение документов более чем одним процессом?
Спасибо.