О нашей компании
Задача Python Мониторинг биткоина Вы работаете в финтех-стартапе. Ваше приложение должно показывать пользователю усредненную цену биткоина (BTC), собирая данные из трех независимых источников: Binance, Coinbase и CoinDesk. Проблема: Внешние API нестабильны. Одно может долго отвечать, другое — временно выдавать ошибку 503, а третье — блокировать частые запросы. Если запрашивать их по очереди, пользователь будет ждать слишком долго. Если один сервис упадет, обычный скрипт выдаст ошибку и не покажет цену вообще. Вам нужно создать систему, которая опрашивает все источники параллельно и считает среднее по тем данным, которые удалось получить. Что именно нужно сделать: Создать декоратор @retry: Он должен принимать аргумент times (количество попыток) и перезапускать функцию, если возникла сетевая ошибка или таймаут. Реализовать параллельность: Использовать ThreadPoolExecutor, чтобы запросы ко всем API уходили одновременно, а не по очереди. Написать логику извлечения: Поскольку структура JSON у всех разная, создайте функцию, которая принимает URL и "путь" к цене в словаре (например, ['data', 'amount']). Обеспечить живучесть: Если один или два сервиса упали даже после всех попыток, программа не должна завершаться с ошибкой. Она должна рассчитать среднее арифметическое на основе оставшихся "живых" данных. Пример работы программы: [OK] Binance: $67400.50 [RETRY] Coinbase: Попытка 1 не удалась... [ERROR] Coinbase: Сервис недоступен после 3 попыток. [OK] CoinDesk: $67405.10 Средняя цена BTC: $67402.80 (расчитано на основе 2 источников) Что нужно использовать: Библиотеку requests для HTTP-запросов. Модуль concurrent.futures (а именно ThreadPoolExecutor) для многопоточности. Декораторы для логики повторных вызовов. Обработку исключений try...except для изоляции ошибок внутри потоков.
