Search
Write a publication
Pull to refresh

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/.

Да, отличное замечание, спасибо. Постараюсь сделать это.

Sign up to leave a comment.

Articles