На этом шаге мы рассмотрим особенности использования этого класса для организации стека.
Данная реализация стека в стандартной библиотеке 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.