Ho bisogno di una coda in cui più thread possono inserire roba e da cui possono leggere più thread.
Python ha almeno due classi di coda, Queue.Queue e collections.deque, con la prima che sembra usare la seconda internamente. Entrambi affermano di essere thread-safe nella documentazione.
Tuttavia, i documenti della coda indicano anche:
Collections.deque è un'implementazione alternativa di code illimitate con operazioni atom (append () e popleft () atomiche veloci che non richiedono il blocco.
Il che immagino di non capire affatto: questo significa che deque non è completamente sicuro per i thread dopo tutto?
In tal caso, potrei non comprendere appieno la differenza tra le due classi. Vedo che la coda aggiunge funzionalità di blocco. D'altra parte, perde alcune funzioni di deque come il supporto per l'operatore.
L'accesso diretto all'oggetto deque interno è
x in Queue (). deque
thread-safe?
Inoltre, perché Queue utilizza un mutex per le sue operazioni quando deque è già sicuro per i thread?
dequepo 'ripetendo lo stesso thread. L'unico motivo per cui non è possibile ottenere questo errore Queueè che Queuenon supporta l'iterazione.
RuntimeError: deque mutated during iterationè quello che potresti ottenere è usare una condivisionedequetra più thread e nessun blocco ...