Comments 5
Асинхронность вы добавили. А вот паралелизация запросов не работает.
Попробуйти сами найти почему generate_requests
не выполняет запросы паралельно?
Так я и не планировал использовать параллелизм.
На примере этого блока кода:
additional_params: dict[str, list[str]] = {
'MAIN_INFO': [self.tech_name],
'COMPOSITION_INFO': [self.tech_type, self.tech_name],
'DETAIL_INFO': [self.tech_type, self.tech_name, last_trade_day, last_trade_day]
}
urls: dict[str, str] = {
url_name: url for url_name, url in MOEX_REQUESTS.items() if url_name in additional_params.keys()
}
self.__tech_full_info: dict[str, dict] = asyncio.run(
Helper.generate_requests(
urls=urls,
additional_params=additional_params
)
)
Получаю подобный результат (добавил принтов для информативности)

Меня вполне устраивает, что все запросы отправляются одновременно и время ожидания занимает менее 0.5.
Это хорошо заметно на большом количестве запросов (не стал уж сюда выкладывать простыню скриншотов), например, когда в программе рассчитывается interval()
за длительный период.
Например, интервал почти в 70 дней (то есть 70 запросов) выполняется за такие же менее 0.5, что меня вполне устраивает.


url: str = url.format(*additional_params[task_name])
Я предпочитаю делегировать форматирование параметров GET запроса клиенту.
Докуметация https://docs.aiohttp.org/en/stable/_modules/aiohttp/client.html#ClientSession.get невнятная, но вроде умеет: https://stackoverflow.com/a/61618328
В другой асинхронной библиотеке описание есть в секции "Passing Parameters in URLs":
https://www.python-httpx.org/quickstart/.
MoexBuilder: как я создаю библиотеку на Python. Часть 2