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?
deque
tiempo mientras itera incluso en el mismo hilo. La única razón por la que no puede obtener este error Queue
es que Queue
no admite la iteración.
RuntimeError: deque mutated during iteration
es lo que podría estar obteniendo es usar undeque
hilo compartido entre varios hilos y sin bloqueo ...