Python Glossary English

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Сообщить о неточности