Question

J'utilise python 2.6.6, pymongo 1.9, 1.6.5 MongoDB, Ubuntu 10.10

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

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

Donc, pour faire que seul un processus get enregistrement que je fais ceci:

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

Cela fonctionne donc:

1 utilisation du processus findAndModify pour obtenir l'emploi 2 processus utiliser findAndModify pour obtenir l'emploi 1 processus make travail et enregistrer résultat 2 processus make travail et enregistrer résultat

processus So get record avec le statut « chargé » et le changer pour « analyser ». Et si cette opération est le deuxième processus atomique ne doit pas voir ce dossier parce qu'il ne satisfait requête.

Mais parfois deux processus obtenir un même enregistrement en même temps, ce qui est le problème.

Quelqu'un peut-il dire pourquoi il est arrive et comment je peux mettre en œuvre la file d'attente avec MongoDB, qui verrouille les documents d'être lu par plus d'un processus?

Merci.

Était-ce utile?

La solution

Alors que cherchait à reproduire ce bogue dans le script autonome, a constaté ce problème n'a pas été dans MongoDB. MongoDB fonctionne comme dit dans le manuel, la question est maintenant fermée.

Pour thous qui a trouvé même bug -. Ne pas oublier de vérifier d'autres threads / processus de modification des données de file d'attente lors de l'exécution

Autres conseils

Vous pouvez utiliser l'instantané = drapeau vrai pour éviter d'avoir ce genre de doublons.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top