В Python есть как минимум два класса очередей: очередь.Queue и коллекции. .deque, причем первый, по-видимому, использует второй внутри себя. В документации оба утверждают, что они потокобезопасны.
Однако в документации Queue также указано:
< р>
Код: Выделить всё
collections.deque
реализация неограниченных очередей
с помощью быстрого атомарного добавления() и
Код: Выделить всё
popleft()
не требуют блокировки, а также поддерживают индексацию.
Что, наверное, я и делаю не совсем понимаю: означает ли это, что deque все-таки не является полностью потокобезопасным?
Если да, то я, возможно, не до конца понимаю разницу между этими двумя классами. Я вижу, что Queue добавляет функцию блокировки. С другой стороны, он теряет некоторые функции deque, такие как поддержка оператора in.
Осуществляет прямой доступ к внутреннему объекту deque
Код: Выделить всё
x in Queue().queue
Кроме того, почему Queue использует мьютекс для своих операций, когда deque является потоко-ориентированным уже в безопасности?
Подробнее здесь: https://stackoverflow.com/questions/717 ... ions-deque