asyncio.gather
Функция asyncio.gather используется для одновременного выполнения нескольких заданий и сбора их результатов. Она принимает несколько корутин (или задач), создаёт для каждой из них задачу, и возвращает единую задачу, которая завершится, когда все переданные ей аргументы завершатся.
Пример:
import asyncio
async def task1():
await asyncio.sleep(1)
return "Результат задачи 1"
async def task2():
await asyncio.sleep(2)
return "Результат задачи 2"
async def main():
results = await asyncio.gather(task1(), task2())
print(results)
asyncio.run(main())
Если любая из подзадач выбрасывает исключение, оно будет передано вызывающему коду. Можно использовать параметр return_exceptions=True для возврата исключений как результатов.
Пример с обработкой исключений:
import asyncio
async def task1():
await asyncio.sleep(1)
return "Результат задачи 1"
async def task_with_exception():
await asyncio.sleep(2)
raise ValueError("Ошибка в задаче")
async def main():
results = await asyncio.gather(
task1(),
task_with_exception(),
return_exceptions=True
)
for result in results:
if isinstance(result, Exception):
print(f"Исключение: {result}")
else:
print(f"Результат: {result}")
asyncio.run(main())
По сути, asyncio.gather - это версия множества вызовов asyncio.create_task с дополнительной обработкой различных ситуаций. Однако, gather не позволяет вручную управлять каждой задачей.