ฉันต้องการคิวที่หลายเธรดสามารถใส่ข้อมูลและหลายกระทู้อาจอ่านได้
Python มีคลาสคิวอย่างน้อยสองคลาสคือ Queue.Queue และ collection.deque โดยที่ก่อนหน้านี้ดูเหมือนจะใช้หลังภายใน ทั้งสองอ้างว่าปลอดภัยต่อเธรดในเอกสารประกอบ
อย่างไรก็ตามคิวเอกสารยังระบุ:
collection.deque เป็นการใช้งานทางเลือกของคิวที่ไม่ได้ถูก จำกัด ด้วยการดำเนินการผนวกอะตอมอย่างรวดเร็ว () และ popleft () ที่ไม่ต้องการการล็อค
ซึ่งฉันคิดว่าฉันไม่ได้พูดค่อนข้างไกล: นี่หมายความว่า deque ไม่ได้เป็นเธรดที่ปลอดภัยทั้งหมดหรือไม่?
ถ้าเป็นฉันอาจไม่เข้าใจความแตกต่างระหว่างสองคลาสอย่างสมบูรณ์ ฉันเห็นว่าคิวเพิ่มฟังก์ชันการบล็อก ในทางกลับกันจะสูญเสียคุณสมบัติบางอย่างเช่นการสนับสนุนสำหรับผู้ประกอบการ
การเข้าถึงวัตถุ deque ภายในโดยตรงคือ
x ในคิว (). deque
ด้ายปลอดภัย?
นอกจากนี้เหตุใดคิวจึงใช้ mutex สำหรับการดำเนินการเมื่อ deque ปลอดภัยต่อเธรดแล้ว
deque
ในขณะที่วนซ้ำแม้ในเธรดเดียวกัน เหตุผลเดียวที่คุณไม่สามารถรับข้อผิดพลาดนี้ได้Queue
คือQueue
ไม่รองรับการวนซ้ำ
RuntimeError: deque mutated during iteration
คือสิ่งที่คุณอาจได้รับใช้ร่วมกันdeque
ระหว่างหลายกระทู้และไม่มีการล็อค ...