Có ai biết cách lặp đi lặp lại các yếu tố của một số Queue.Queue
mà không cần xóa chúng khỏi Hàng đợi. Tôi có chương trình nhà sản xuất/người tiêu dùng, nơi các mặt hàng được xử lý được chuyển qua sử dụng Queue.Queue
và tôi muốn có thể in các mặt hàng còn lại là gì. Bất kỳ ý tưởng?Làm cách nào để lặp lại các mục Queue.Queue bằng Python?
16
A
Trả lời
25
Bạn có thể lặp qua một bản sao của các cửa hàng dữ liệu cơ bản:
for elem in list(q.queue)
Cho dù này bỏ qua ổ khóa cho các đối tượng Queue, bản danh sách là một hoạt động nguyên tử và nó sẽ làm việc ra tốt đẹp.
Nếu bạn muốn giữ khóa, tại sao không kéo tất cả các tác vụ ra khỏi hàng đợi, sao chép danh sách của bạn và sau đó đặt chúng trở lại.
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
Bạn có thể phân lớp queue.Queue
để đạt được điều này một cách thread-safe:
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
yếu tố hàng đợi Liệt kê mà không tốn nhiều họ:
>>> from Queue import Queue
>>> q = Queue()
>>> q.put(1)
>>> q.put(2)
>>> q.put(3)
>>> print list(q.queue)
[1, 2, 3]
Sau khi phẫu thuật, bạn nhận được vẫn xử lý chúng :
>>> q.get()
1
>>> print list(q.queue)
[2, 3]
Các vấn đề liên quan
- 1. Làm cách nào để lặp lại các tệp bằng Python?
- 2. Lặp lại ngược bằng cách sử dụng các chỉ mục trong Python?
- 3. Lặp lại tất cả các tệp trong thư mục bằng cách sử dụng vòng lặp 'for'
- 4. Lặp lại thông qua các trang web bằng Python Scrapy
- 5. Lặp lại các mục từ điển(), giá trị(), phím() bằng Python 3
- 6. Làm cách nào để lọc các mục từ danh sách bằng Python?
- 7. Làm cách nào để lặp qua các bộ mục của hai hoặc nhiều danh sách bằng Python?
- 8. Làm cách nào để ghi lại mô-đun bằng Python?
- 9. Làm cách nào để lặp lại các tệp trong một thư mục nhất định?
- 10. Làm thế nào để lặp lại cho đến khi EOF bằng Python?
- 11. Làm cách nào để xoá các ký tự lặp lại trong chuỗi bằng R?
- 12. Python "set" với các phần tử trùng lặp/lặp lại
- 13. Làm cách nào để ghép nối các tệp bằng Python?
- 14. Trong C++, làm thế nào để lặp lại mảng ngược lại bằng cách sử dụng for_each?
- 15. python làm cho lớp có thể lặp lại bằng cách trả về nhúng có thể lặp lại
- 16. Hàng đợi có thể lặp lại bằng Python
- 17. Làm cách nào để tôi chỉ truy xuất các chủ sự kiện lặp lại bằng các dịch vụ Web Exchange?
- 18. Làm cách nào để lặp lại từ điển Python, được sắp xếp theo giá trị?
- 19. Looping thông qua các mục lặp lại
- 20. Lặp lại các mục ListView trong Android
- 21. Làm cách nào để lặp lại các phần tử `std :: stack` trong vòng lặp for?
- 22. Làm cách nào để nén tệp bằng cấu trúc thư mục phẳng bằng Zipfile bằng Python?
- 23. Thư viện để làm việc với các quy tắc lặp lại trong Mục tiêu C?
- 24. Làm cách nào để nhóm các mục tương đương lại với nhau trong một danh sách Python?
- 25. Làm thế nào để bạn đi qua các thư mục bằng cách sử dụng python?
- 26. Cách cấu trúc các gói python mà không lặp lại tên cấp cao nhất để nhập
- 27. Làm cách nào để hiển thị chỉ mục trong khi lặp lại danh sách với Django?
- 28. Làm cách nào để lặp qua chuỗi trong Python?
- 29. Lặp lại các mảng bằng cách phản chiếu
- 30. Làm cách nào để chỉ lặp lại các tệp không tồn tại ở đích bằng gói SSIS?
'cho elem trong danh sách (q.queue)' kết quả trong 'TypeError: 'Queue' đối tượng không thể lặp lại trong Python 3. Có lẽ tôi đang làm điều gì đó sai? –
@ macmadness86 Có vẻ như bạn có một lớp khác với "q" là đối tượng mã có thuộc tính "hàng đợi" chứa đối tượng Queue. Hãy thử điều này: '' cho elem trong danh sách (q.queue.queue) ''. –
Roger đó. Sẽ tuân thủ. Cảm ơn vì tiền hỗ trợ. (thông báo này được lên lịch xóa) –