Есть ли другие очереди в стандартной библиотеке?
-
27-10-2019 - |
Вопрос
Я хочу стоять в очереди
lambda : Popen(.....)
Позвонить/подождать позже. Затем добавьте еще немного, чтобы приостановить Popens в очередь, затем потребляйте их снова и так далее.
Основной модуль очереди очень заботится о синхронизации, и это заставляет API чувствовать себя немного странным в местах. Меня не волнует синхронизировать (однопоточная программа, Popen просто выполняйте свою работу и бросайте исключение по ошибке, и они не влияют на окружающую среду какими -либо важными способами (они генерируют файлы)
Должен ли я просто использовать генератор, который я добавляю к нему позже. Если да, то какой способ добавить элементы в генераторы, звонить
gena = itertools.chain(gena,[item))
Каждый раз кажется расточительным.
Решение
Да, вы можете использовать deque (collections.deque), который представляет собой список, который вы можете эффективно подтолкнуть и заскочить на любом конце. Вы также можете использовать список и не беспокоиться о неэффективности, поскольку это, вероятно, не имеет значения.
Другие советы
Вы можете использовать Collections.deque:
from collections import deque
queue = deque()
queue.append(new) # append
current = queue.popleft() # first item
Поскольку вы не обеспокоены многопоточным, логический выбор, казалось бы, был бы Collections.deque.