Слияние данных двух асинхронных запросов с помощью корутин

Запустите оба запроса отдельными задачами, дождитесь их завершения и объедините результаты. В 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее