Czy ktoś zna pyton sposób iteracji elementów Queue.Queue
bez usuwanie ich z kolejki. Mam program typu producent/konsument, w którym przedmioty do przetworzenia są przekazywane za pomocą numeru Queue.Queue
i chcę móc wydrukować pozostałe elementy. Jakieś pomysły?Jak iterować elementy Queue.Queue w języku Python?
16
A
Odpowiedz
25
Można pętli nad kopią bazowego magazynu danych:
for elem in list(q.queue)
Eventhough ten omija blokady dla obiektów kolejce, lista kopia jest operacją atomową i powinien wypracować w porządku.
Jeśli chcesz zachować blokady, może nie wyciągać wszystkich zadań z kolejki, tworzyć listę, a następnie je odkładać.
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
2
Można podklasy queue.Queue
do osiągnięcia tego celu w wątku bezpieczny sposób:
import queue
class ImprovedQueue(queue.Queue):
def to_list(self):
"""
Returns a copy of all items in the queue without removing them.
"""
with self.mutex:
return list(self.queue)
0
elementów kolejek Zamieszczone bez ich spożywania:
>>> from Queue import Queue
>>> q = Queue()
>>> q.put(1)
>>> q.put(2)
>>> q.put(3)
>>> print list(q.queue)
[1, 2, 3]
Po zakończeniu pracy, można się nadal je przetwarzać :
>>> q.get()
1
>>> print list(q.queue)
[2, 3]
Powiązane problemy
- 1. Jak iterować elementy hash, w środowisku R?
- 2. Jak iterować elementy mapy w pytonie
- 3. Python: Dlaczego niektóre metody Queue.queue są "niewiarygodne"?
- 4. Python iterować po słowniku
- 5. Jak iterować po tablicy i usunąć elementy w JavaScript
- 6. Jak mogę iterować elementy `std :: stack` w pętli for?
- 7. Jak iterować mapę w języku golang w celu?
- 8. Czy python Queue.queue pobiera i umieszcza wątek bezpieczny?
- 9. Python - Jak wyciąć napis w języku Python?
- 10. Jak mogę iterować elementy QListWidget i pracować z każdym elementem?
- 11. Jak mogę iterować JSONObject, aby uzyskać poszczególne elementy?
- 12. Jak iterować w MultiKeyMap?
- 13. Deskryptory w języku Python nie działają w języku Python 2.7
- 14. sqlite3 w języku Python
- 15. ++ operator w języku Python
- 16. Pakiety w języku Python?
- 17. Wątki w języku Python
- 18. iteritems w języku Python
- 19. Logowanie w języku Python?
- 20. Przerwa w języku Python
- 21. Jak iterować wyniki selektora jquery
- 22. Sprawdź, czy elementy istnieją w bieżącym języku?
- 23. Jak iterować stos w Javie
- 24. Jak odróżnić dwa słowniki w języku Python?
- 25. Jak mogę zdemontować skrypt w języku Python?
- 26. Jak uruchomić program w języku Python?
- 27. Jak zabić zadanie wieloprocesorowe w języku Python?
- 28. Jak wydrukować dokumentację modułu w języku Python
- 29. Jak wykonać żądanie wpisu w języku Python?
- 30. Jak posortować listę w języku Python?
'dla elem na liście (q.queue)' powoduje 'TypeError: 'Obiekt kolejki nie jest iterable' w Pythonie 3. Być może robię coś nie tak? –
@ macmadness86 Wygląda na to, że masz kolejną warstwę z "q" będącym obiektem kodu, który ma atrybut "queue", który przechowuje obiekt Queue. Spróbuj tego: '' dla elem na liście (q.queue.queue) ''. –
Zgadzam się. Będzie zgodny. Dzięki za wskazówkę. (ta wiadomość jest zaplanowana do usunięcia) –