time.sleep блокирует event loop, поэтому 100 корутин фактически выполнят ожидания последовательно примерно за 10 секунд. gather не делает синхронное блокирующее действие неблокирующим.
async def process_chunk(chunk: str) -> str:
time.sleep блокирует event loop, поэтому 100 корутин фактически выполнят ожидания последовательно примерно за 10 секунд. gather не делает синхронное блокирующее действие неблокирующим.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
async def process_chunk(chunk: str) -> str: time.sleep(0.1) return chunk.upper()
async def main(): chunks = ["text"] * 100 tasks = [process_chunk(c) for c in chunks]
results = await asyncio.gather(*tasks)
print(len(results))
Ответ
time.sleep блокирует event loop, поэтому 100 корутин фактически выполнят ожидания последовательно примерно за 10 секунд. gather не делает синхронное блокирующее действие неблокирующим.
Если здесь моделируется асинхронное ожидание, замените его:
async def process_chunk(chunk: str) -> str:
await asyncio.sleep(0.1)
return chunk.upper()
При свободном loop общее ожидание будет близко к 0,1 секунды плюс накладные расходы, а напечатается 100. Если вместо sleep реальное блокирующее I/O, нужен async-драйвер или ограниченный thread pool; для тяжёлого CPU-преобразования рассматривают другие исполнители. Сотни тысяч задач сразу тоже создавать не стоит.