Saya perlu antrian tempat beberapa utas dapat memasukkan berbagai hal, dan beberapa utas dapat dibaca.
Python memiliki setidaknya dua kelas antrian, Antrian. Antrian dan collections.deque, dengan yang pertama tampaknya menggunakan yang terakhir secara internal. Keduanya mengklaim aman dalam dokumentasi.
Namun, dokumen Antrian juga menyatakan:
collections.deque adalah implementasi alternatif dari antrian tidak terbatas dengan operasi append atom cepat () dan popleft () yang tidak memerlukan penguncian.
Yang saya kira saya tidak mengerti: Apakah ini berarti deque tidak sepenuhnya aman setelah semua?
Jika ya, saya mungkin tidak sepenuhnya memahami perbedaan antara kedua kelas. Saya dapat melihat bahwa Antrian menambahkan fungsi pemblokiran. Di sisi lain, ia kehilangan beberapa fitur deque seperti dukungan untuk operator.
Mengakses objek deque internal secara langsung, adalah
x dalam Antrian () .queque
aman?
Juga, mengapa Antrian menggunakan mutex untuk operasi itu ketika deque sudah thread-safe?
deque
saat iterasi bahkan di utas yang sama. Satu-satunya alasan Anda tidak bisa mendapatkan kesalahan ini Queue
adalah karena Queue
tidak mendukung iterasi.
RuntimeError: deque mutated during iteration
adalah apa yang bisa Anda dapatkan adalah menggunakan shareddeque
antara beberapa utas dan tidak ada penguncian ...