Comments 6
Идея хороша, но возможно, только для фана 😂.
Ну так для этого, по большей части, она и делалась😅. А еще для того что бы разобраться в написании бота для телеграма, и в некоторых серверных вещичках.
Кстати, а куда делась ваша статья про API МосБиржи в Google таблицах? Она на ранних стадиях помогла разобраться в некоторых нюансах API. И почему-то сейчас не отображается.
Небольшое замечание по вот этому куску кода:
async def _download_stock_market_data(url, file_path):
with requests.get(url) as response:
if response.status_code == 200:
with open(file_path, 'w') as file:
json.dump(response.json(), file)
async def download_data():
await asyncio.gather(
_download_stock_market_data(url_ofz, config.ofz_file),
_download_stock_market_data(url_bonds, config.bonds_file),
_download_stock_market_data(url_bpif, config.bpif_file),
_download_stock_market_data(url_shares, config.stocks_file),
)
Вы делаете асинхронную функцию, но внутри используете синхронную библиотеку requests. В данном случае у вас все эти задачи внутри gather мало того, что выполняются последовательно друг за другом, так каждая из них ещё и блокирует основной EventLoop, поэтому любой медленный запрос к бирже заморозит всё, что в нём крутится. Здесь это не критично конечно, но такой подход может подложить очень болезненную ошибку при написании каких-нибудь сервисов (например запрос в упавший микросервис будет блокировать ваш собственный сервис целиком, и куча клиентов получат ошибки)
Можно взять httpx или посмотреть, какие там ещё библиотеки для async есть.
Не пробовали либу от Тинькофф?
Она поддерживаемая и не придется парится с вебом и тп подобными штуками.
https://tinkoff.github.io/invest-python/
Непредсказуемые инвестиции с Python