Этот вопрос проверяет знание способов параллельного выполнения задач в асинхронном Python-коде.
В асинхронном коде можно использовать asyncio.gather() для параллельного запуска корутин, asyncio.create_task() для фоновых задач или asyncio.wait() с разными стратегиями ожидания. Также можно использовать aiohttp для параллельных HTTP-запросов.
asyncio.gather()
Запускает несколько корутин параллельно и ждёт завершения всех:
async def task1(): ...
async def task2(): ...
results = await asyncio.gather(task1(), task2())asyncio.create_task()
Запускает корутину как фоновую задачу:
task = asyncio.create_task(task1())
await task2() # Выполняется параллельно с task1
await taskasyncio.wait()
done, pending = await asyncio.wait(
[task1(), task2()],
return_when=asyncio.FIRST_COMPLETED
)async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
async def main():
google, yahoo = await asyncio.gather(
fetch('https://google.com'),
fetch('https://yahoo.com')
)Когда использовать:
gather: когда нужно выполнить несколько задач и дождаться всех результатов
create_task: для фоновых задач, которые могут выполняться долго
wait: когда нужен контроль над выполнением (например, FIRST_COMPLETED)