Шаг 124.
Python: тонкости программирования. ... . Стеки (с дисциплиной доступа LIFO). deque.LifoQueue - семантика блокирования для параллельных вычислений

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

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


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

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

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

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

    На следующем шаге мы рассмотрим сравнение реализаций стека в Python.




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