2011-01-19 5 views
2

J'utilise python 2.6.6, pymongo 1.9, 1.6.5 MongoDB, Ubuntu 10.10problème MongoDB FindAndModify avec l'utilisation multiprocessus

J'ai un problème étrange avec commande FindAndModify.

J'ai deux processus identiques en cours d'exécution en même temps. Ils obtiennent des enregistrements de DB avec FindAndModify (implémente une sorte de file d'attente).

Donc, pour faire que seul un processus obtenir dossier je ne ceci:

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

Cela fonctionne donc:

1 processus utiliser findAndModify pour obtenir l'emploi 2 processus utiliser findAndModify pour obtenir l'emploi 1 processus faire le travail et sauver le résultat 2 processus faire le travail et sauver le résultat

Ainsi le processus obtient l'enregistrement avec le statut "chargé" et le change en "analysant". Et si cette opération est atomique, le second processus ne devrait pas voir cet enregistrement car il ne satisfait pas la requête.

Mais parfois deux processus obtiennent un même enregistrement en même temps, et c'est un problème. Est-ce que quelqu'un peut dire pourquoi cela se passe et comment je peux mettre en place une file d'attente avec mongodb qui empêchera les documents de lire par plus d'un processus?

Merci.

Répondre

1

Alors qu'il essayait de reproduire ce bogue dans un script autonome, trouvé que le problème n'était pas dans MongoDB. MongoDB fonctionne comme indiqué dans le manuel, donc la question est fermée maintenant. Pour mille qui ont trouvé le même bogue - N'oubliez pas de vérifier d'autres threads/processus pour modifier les données de la file d'attente au moment de l'exécution.

0

Vous pouvez utiliser le snapshot = True flag pour éviter d'avoir ce genre de doublons.

Questions connexes