Junior — Senior
34
Асинхронная обработка списка заказов и связанных данных о пользователях
Условие задачи
Необходимо написать функцию, которая получает массив заказов и для каждого из них выполняет цепочку запросов:
- По
order_idотправляет запрос кorders_service_urlи получает идентификаторuser_id. - С полученным
user_idодновременно делает два запроса:- к
user_service_url— сервис возвращает JSON‑объект с информацией о пользователе; - к
af_service_url— сервис возвращает JSON‑объект с данными о доставке.
- к
- После получения ответов от обоих сервисов передаёт их в функцию
process_users_and_shipments(user: dict, af_info: dict) -> Anyдля дальнейшей бизнес‑логики.
from typing import Any
# Сначала в order_service смотрим, какой заказ делал какой пользователь
orders_service_url = "http://some-domain.ru/api/v1/user-orders"
# С этими пользователями идем в:
user_service_url = "http://some-domain.ru/api/v1/user"
af_service_url = "http://some-domain.ru/api/v1/af"
# 10 миллионов запросов
# В качестве результата на order service будет возвращен id пользователя user_id
order_requests = [
{"order_id": 25},
{"order_id": 26},
{"order_id": 34},
# ...
]
def process_users_and_shipments(user: dict, af_info: dict) -> Any:
# some business logic
...
Функция должна быть реализована с использованием асинхронных средств (например, asyncio и aiohttp) для того, чтобы эффективно обрабатывать большое количество запросов без блокировки.