Tôi cần một hàng đợi mà nhiều luồng có thể đặt công cụ vào và nhiều luồng có thể đọc từ đó.
Python có ít nhất hai lớp xếp hàng, Queue.Queue và samples.deque, với lớp trước dường như sử dụng lớp sau trong nội bộ. Cả hai đều tuyên bố là an toàn chủ đề trong tài liệu.
Tuy nhiên, các tài liệu xếp hàng cũng nêu:
bộ sưu tập.deque là một triển khai thay thế của hàng đợi không giới hạn với các hoạt động append () và popleft () nguyên tử nhanh không yêu cầu khóa.
Mà tôi đoán tôi không hiểu lắm: Điều này có nghĩa là deque không hoàn toàn an toàn cho chủ đề?
Nếu có, tôi có thể không hoàn toàn hiểu sự khác biệt giữa hai lớp. Tôi có thể thấy rằng Queue thêm chức năng chặn. Mặt khác, nó mất một số tính năng deque như hỗ trợ cho người vận hành.
Truy cập trực tiếp vào đối tượng deque, là
x trong Hàng đợi (). deque
an toàn chủ đề?
Ngoài ra, tại sao Queue sử dụng một mutex cho các hoạt động của nó khi deque đã an toàn cho luồng?
deque
trong một lần lặp ngay cả trong cùng một chuỗi. Lý do duy nhất bạn không thể nhận được lỗi Queue
này là vì Queue
nó không hỗ trợ phép lặp.
RuntimeError: deque mutated during iteration
là những gì bạn có thể nhận được bằng cách sử dụng chia sẻdeque
giữa một số luồng và không khóa ...