Pull to refresh

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 есть.

О Код-ревью, классно! Вполне справедливое замечание. При наличии свободного времени посмотрю httpx. Возможно даже перепишу этот кусок кода.

Честно говоря, я пока что не убедился что в python есть полноценный асинхронн (и думаю не убежусь). И все же спасибо за полезное замечание.

Sign up to leave a comment.

Articles