Domanda

Io uso python 2.6.6, pymongo 1.9, MongoDB 1.6.5, Ubuntu 10.10

Ho strano problema con il comando FindAndModify.

Ho due identico processo in esecuzione allo stesso tempo. Ottengono record da db con FindAndModify (implementa una sorta di coda).

Quindi, per fare che solo un processo di ottenere il record faccio questo:

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

Questo funziona così:

uso 1 processo findAndModify per ottenere lavoro 2 processo utilizzare findAndModify per ottenere lavoro 1 processo di lavoro marca e Salva risultato 2 processo di lavoro marca e salvare risultato

Quindi record di processo get con lo stato "caricato" e cambiare in "analizzare". E se questa operazione è atomica secondo processo non dovrebbe vedere questo disco perché non soddisfa query.

Ma a volte due processi ottenere uno stesso record nello stesso momento, e questo è un problema.

Qualcuno può raccontare perché è succede e come posso implementare coda con MongoDB che bloccare i documenti da essere leggere da più di un processo?

Grazie.

È stato utile?

Soluzione

Mentre stava cercando di riprodurre il bug nello script standalone, ha trovato che il problema non era in MongoDB. MongoDB lavora come detto in manuale, quindi la domanda è chiusa oggi.

Per thous che ha trovato lo stesso bug -. Non dimenticate di controllare un altro thread / processi per modificare i dati della coda in fase di esecuzione

Altri suggerimenti

È possibile utilizzare l'istantanea = True bandiera per evitare di ottenere questo tipo di duplicati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top