Запустите оба запроса отдельными задачами, дождитесь их завершения и объедините результаты. В Python 3.11+ для связанной группы задач подходит asyncio.TaskGroup.
Слияние данных двух асинхронных запросов с помощью корутин
Запустите оба запроса отдельными задачами, дождитесь их завершения и объедините результаты. В Python 3.11+ для связанной группы задач подходит asyncio.TaskGroup.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте программу, использующую корутины, которая одновременно запускает два сетевых запроса и объединяет полученные ответы в единый объект. При этом необходимо обеспечить параллельное выполнение запросов и корректную агрегацию их результатов.
# пример кода, который нужно написать
Ответ
Запустите оба запроса отдельными задачами, дождитесь их завершения и объедините результаты. В Python 3.11+ для связанной группы задач подходит asyncio.TaskGroup.
Функции fetch_a и fetch_b ниже — переданные асинхронные функции вашего HTTP-клиента; они должны возвращать разобранные ответы.
import asyncio
async def load_combined(fetch_a, fetch_b):
async with asyncio.TaskGroup() as group:
a = group.create_task(fetch_a())
b = group.create_task(fetch_b())
return {'a': a.result(), 'b': b.result()}
Ожидания сети перекрываются во времени: второй запрос не ждёт результата первого. Это конкурентное выполнение, а не требование двух процессорных потоков. При обычной ошибке одной задачи TaskGroup отменяет другую и передаёт исключения вызывающему коду. Настройте HTTP-таймауты; блокирующий клиент нельзя вызывать напрямую внутри event loop.
Источник: docs.python.org.