Preciso de uma fila na qual vários threads possam colocar coisas e vários threads possam ler.
O Python possui pelo menos duas classes de fila, Queue.Queue e collections.deque, sendo que o primeiro parece usar o último internamente. Ambos afirmam ser seguros para threads na documentação.
No entanto, os documentos da fila também declaram:
collections.deque é uma implementação alternativa de filas ilimitadas com operações atômicas append () e popleft () rápidas que não requerem bloqueio.
Acho que não entendo bem: isso significa que o deque não é totalmente seguro para threads, afinal?
Se for, posso não entender completamente a diferença entre as duas classes. Percebo que a fila adiciona funcionalidade de bloqueio. Por outro lado, perde alguns recursos de deque, como suporte para o operador.
Acessar o objeto deque interno diretamente, é
x em Queue (). deque
discussão segura?
Além disso, por que o Queue emprega um mutex para suas operações quando o deque já é seguro para threads?
deque
tempo, mesmo iterando no mesmo thread. O único motivo pelo qual você não pode obter esse erro Queue
é que Queue
ele não suporta iteração.
RuntimeError: deque mutated during iteration
é o que você poderia estar recebendo está usando uma compartilhadadeque
entre vários fio e nenhum bloqueio ...