Шаг 130.
Python: тонкости программирования. ... . Очереди (с дисциплиной доступа FIFO). queue.Queue - семантика блокирования для параллельных вычислений

    На этом шаге мы рассмотрим особенности использования этого класса для организации очереди.

    Данная реализация очереди в стандартной библиотеке Python синхронизирована и обеспечивает семантику блокирования с целью поддержки многочисленных параллельных производителей и потребителей.


См. документацию Python "queue.Queue": https://docs.python.org/3.6/library/queue.html#module-queue.

    Модуль queue содержит несколько других классов, которые реализуют очереди с мультипроизводителями/мультипотребителями, которые широко используются в параллельных вычислениях.

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

>>> from queue import Queue
>>> q = Queue()
>>> s.put('есть')
>>> s.put('спать')
>>> s.put('программировать')
>>> q
<queue.Queue object at 0x0000019E0F536520>
>>> q.get()
'есть'
>>> q.get()
'спать'
>>> q.get()
'программировать'
>>> q.get_nowait()
Traceback (most recent call last):
.   .   .   .
_queue.Empty
>>> q.get()
# Блокирует / ожидает бесконечно...

    На следующем шаге мы рассмотрим класс multiprocessing.Queue.




Предыдущий шаг Содержание Следующий шаг