2011-03-31 2 views
5

Je remplis une file d'attente avec un jeu de tâches que je veux exécuter en parallèle et j'utilise le module multitraitement de python pour cela. Extrait de code ci-dessous:File d'attente de multiprocessus Python

import multiprocessing 
from multiprocessing import Queue 
queue = Queue() 
jobs = [['a', 'b'], ['c', 'd']] 
for job in jobs: 
    queue.put(job) 

Quand je fais que je reçois le texte suivant queue.get():

['a', 'b'] 

Pourquoi la file d'attente ne se peuplé avec tous les emplois?

Répondre

13

La file d'attente est en train d'être remplie. Vous devez appeler queue.get() chaque fois que vous placez un objet dans la file d'attente. Vous avez juste besoin d'appeler queue.get() une fois de plus.

>>> import multiprocessing 
>>> from multiprocessing import Queue 
>>> queue = Queue() 
>>> jobs = [['a', 'b'], ['c', 'd']] 
>>> for job in jobs: 
    queue.put(job) 


>>> queue.get() 
['a', 'b'] 
>>> queue.get() 
['c', 'd'] 
+0

aah..je comprends maintenant .. merci !!! –

+0

De rien. –

12

La file d'attente est remplie avec tous vos travaux. queue.get() se

Supprimer et retourner un élément de la file d'attente .

Un article est au singulier. Si vous souhaitez vider la file d'attente, mettez simplement votre .get() en boucle, mais assurez-vous d'attraper l'exception Empty.

+3

Pourquoi cela a-t-il été déprécié? Je suis confus.. –

Questions connexes