Hardasyncio
Что такое asyncio.Queue?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
asyncio.Queue — async FIFO очередь для producer-consumer в asyncio. put() блокирует корутину (не thread) если очередь полна — другие корутины могут работать.
import asyncio
async def producer(q):
for i in range(10):
await q.put(i)
await asyncio.sleep(0.1)
await q.put(None) # сигнал завершения
async def consumer(q):
while True:
item = await q.get()
if item is None:
break
await process(item)
q.task_done()
async def main():
q = asyncio.Queue(maxsize=10)
await asyncio.gather(producer(q), consumer(q))
await q.join() # ждать пока все items обработаны
asyncio.run(main())put_nowait/get_nowait— бросают QueueEmpty/QueueFull;PriorityQueue,LifoQueue— варианты;- Для координации корутин в одном event loop, не между процессами;
- Для cross-thread/cross-process —
queue.Queue(threading) илиmultiprocessing.Queue.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.