Necesito una cola en la que múltiples hilos puedan poner cosas, y múltiples hilos pueden leer.
Python tiene al menos dos clases de cola, Queue.Queue y collections.deque, y la primera aparentemente usa la segunda internamente. Ambos afirman ser seguros para subprocesos en la documentación.
Sin embargo, los documentos de la cola también indican:
collections.deque es una implementación alternativa de colas ilimitadas con operaciones rápidas atómica append () y popleft () que no requieren bloqueo.
Lo que supongo que no entiendo del todo: ¿significa esto que deque no es completamente seguro para subprocesos después de todo?
Si es así, es posible que no entienda completamente la diferencia entre las dos clases. Puedo ver que Queue agrega funcionalidad de bloqueo. Por otro lado, pierde algunas características antiguas como el soporte para el operador interno.
Acceder al objeto de deque interno directamente, es
x en Queue (). deque
¿a salvo de amenazas?
Además, ¿por qué Queue emplea un mutex para sus operaciones cuando deque ya es seguro para subprocesos?
dequetiempo mientras itera incluso en el mismo hilo. La única razón por la que no puede obtener este error Queuees que Queueno admite la iteración.
RuntimeError: deque mutated during iterationes lo que podría estar obteniendo es usar undequehilo compartido entre varios hilos y sin bloqueo ...