Birden çok iş parçacığı içine şeyler koyabilirsiniz ve birden çok iş parçacığı okuyabilir bir kuyruk gerekir.
Python'un en az iki kuyruk sınıfı vardır: Queue.Queue ve collections.deque, birincisi ikincisini dahili olarak kullanıyor. Her ikisi de belgelerde iş parçacığı açısından güvenli olduğunu iddia ediyor.
Ancak, Sıra belgeleri şunları da belirtir:
collections.deque, kilitleme gerektirmeyen hızlı atomik append () ve popleft () işlemleriyle sınırsız kuyrukların alternatif bir uygulamasıdır.
Hangi sanırım oldukça dayanamıyorum: bu deque sonuçta tamamen güvenli değil anlamına mı geliyor?
Eğer öyleyse, iki sınıf arasındaki farkı tam olarak anlayamayabilirim. Sıranın engelleme işlevi eklediğini görebiliyorum. Öte yandan, operatör için destek gibi bazı deque özelliklerini kaybeder.
Dahili deque nesnesine doğrudan erişmek,
Sırada x (). deque
evreli?
Ayrıca, deque zaten iş parçacığı için güvenli olduğunda Queue neden işlemleri için bir muteks kullanır?
deque
Aynı iş parçacığında bile yinelenirken bir süre eklediğinizde / sildiğinizde bu hatayı alabilirsiniz . Tek nedeni bu hatayı alamayan Queue
DİR Queue
yinelemeyi desteklemez.
RuntimeError: deque mutated during iteration
elde edebileceğiniz şeydeque
birkaç iplik arasında paylaşılan ve kilitleme yok ...