Queue.Queue vs. Коллекции.deque

Как это может быть дольше, чем

tmp = my_list[indexOfPwd2]
my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1]
my_list[indexOfPwd2 + 1] = tmp

Это простой обмен с использованием временного хранилища.

146
задан kdopen 10 May 2015 в 17:33
поделиться

2 ответа

Queue.Queue и collections.deque служите различным целям. Очередь. Очередь предназначается для разрешения различных потоков связаться, использование поставило сообщения/данные в очередь, тогда как collections.deque просто предназначается как datastructure. Вот почему Queue.Queue имеет методы как put_nowait(), get_nowait(), и join(), тогда как collections.deque не делает. Queue.Queue не предназначается, чтобы использоваться в качестве набора, который является, почему он испытывает недостаток в подобных in оператор.

Это сводится к этому: если у Вас есть несколько потоков, и Вы хотите, чтобы они смогли связаться без потребности в блокировках, Вы ищете Queue.Queue; если Вы просто хотите очередь или очередь с двусторонним доступом как datastructure, использовать collections.deque.

Наконец, получая доступ и управляя внутренней двухсторонней очередью a Queue.Queue играет с огнем - Вы действительно не хотите делать это.

252
ответ дан 23 November 2019 в 21:40
поделиться

deque ориентировано на многопотоковое исполнение. "операции, которые не требуют блокировки", означают, что Вы не должны делать блокировки себя, deque заботится о нем.

Взгляд на Queue источник, внутреннюю двухстороннюю очередь называют self.queue и использует взаимное исключение для средств доступа и мутаций, таким образом, Queue().queue не ориентировано на многопотоковое исполнение для использования.

Если Вы ищете "в" операторе, то двухсторонняя очередь или очередь являются возможно не самой соответствующей структурой данных для Вашей проблемы.

2
ответ дан 23 November 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: