Мне нужна очередь, в которую может помещаться несколько потоков, и из которых могут считываться несколько потоков.
В Python есть как минимум два класса очереди, Queue.Queue и collection.deque, причем первый, по-видимому, использует второй для внутреннего использования. Оба утверждают, что они являются потокобезопасными в документации.
Тем не менее, документы очереди также утверждают:
collection.deque - это альтернативная реализация неограниченных очередей с быстрыми атомарными операциями append () и popleft (), которые не требуют блокировки.
Что, я думаю, я не совсем понимаю: означает ли это, что deque в конце концов не является полностью поточно-ориентированным?
Если это так, я не могу полностью понять разницу между двумя классами. Я вижу, что очередь добавляет функциональность блокировки. С другой стороны, он теряет некоторые скрытые функции, такие как поддержка оператора.
Прямой доступ к внутреннему объекту deque
х в очереди (). deque
потокобезопасный?
Кроме того, почему Queue использует мьютекс для своих операций, когда deque уже поточно-ориентирован?
deque
время, повторяя даже в том же потоке. Единственная причина, по которой вы не можете получить эту ошибку, Queue
заключается в том, что Queue
она не поддерживает итерацию.
RuntimeError: deque mutated during iteration
то, что вы могли бы получить, это использование общегоdeque
потока между несколькими потоками и отсутствие блокировки ...