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?
deque
po 'ripetendo lo stesso thread. L'unico motivo per cui non è possibile ottenere questo errore Queue
è che Queue
non supporta l'iterazione.
RuntimeError: deque mutated during iteration
è quello che potresti ottenere è usare una condivisionedeque
tra più thread e nessun blocco ...