Python 3.4+Асинхронное программированиепонятие
asyncio.LifoQueue
очередь
Асинхронная очередь «последним пришёл — первым вышел»: get() отдаёт элемент, положенный последним. Интерфейс тот же, что у asyncio.Queue.
Синтаксис
q = asyncio.LifoQueue(maxsize=0); await q.put(x); x = await q.get()
По сути это стек с ожиданием: get() на пустой очереди ждёт, put() на полной (если задан maxsize) тоже ждёт. Для стека внутри одной корутины очередь не нужна — хватит списка с append() и pop(); LifoQueue оправдана, когда кладут и забирают разные задачи. Это не queue.LifoQueue из модуля queue: та для потоков и её get() блокирует весь цикл событий.
Примеры
import asyncio
async def main():
q = asyncio.LifoQueue()
for x in (1, 2, 3):
await q.put(x)
await asyncio.sleep(0.01)
print([q.get_nowait() for _ in range(3)]) # → [3, 2, 1]
asyncio.run(main())
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности