Est-ce que quelqu'un connaît un moyen pythonique d'itérer sur les éléments d'un Queue.Queue
sans les supprimer de la file d'attente. J'ai un programme de type producteur/consommateur où les éléments à traiter sont passés à l'aide d'un Queue.Queue
, et je veux pouvoir imprimer quels sont les éléments restants. Des idées?
Réponses
Trop de publicités?
Raymond Hettinger
Points
231
Vous pouvez parcourir une copie du magasin de données sous-jacent :
for elem in list(q.queue)
Même si cela contourne les verrous des objets Queue, la copie de liste est une opération atomique et cela devrait fonctionner correctement.
Si vous souhaitez conserver les verrous, pourquoi ne pas retirer toutes les tâches de la file d'attente, faire une copie de votre liste, puis les remettre en place.
mycopy = []
while True:
try:
elem = q.get(block=False)
except Empty:
break
else:
mycopy.append(elem)
for elem in mycopy:
q.put(elem)
for elem in mycopy:
# do something with the elements
Omer Dagan
Points
889
Erwin Mayer
Points
3427