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?
dequeAynı iş parçacığında bile yinelenirken bir süre eklediğinizde / sildiğinizde bu hatayı alabilirsiniz . Tek nedeni bu hatayı alamayan QueueDİR Queueyinelemeyi desteklemez.
RuntimeError: deque mutated during iterationelde edebileceğiniz şeydequebirkaç iplik arasında paylaşılan ve kilitleme yok ...