ekonda / kutana

The library for developing systems for messengers and social networks
MIT License
72 stars 17 forks source link

Производительность httpx почти в 2 раза ниже чем aiohttp #85

Closed daeeros closed 7 months ago

daeeros commented 7 months ago

Решил на проде всё же замерить скорость обработки запросов как аио так и httpx, делаем 500 запросов. Как итог, httpx справляется в 2 раза дольше нежели aiohttp. Когда бот разрастется это будет уже критично, но пока что не заметно на маленьких кол-вах запросов.

import asyncio
import time
import httpx
import aiohttp

httpx_client = httpx.AsyncClient()
aiohttp_client = aiohttp.ClientSession()

try:
    text = ""

    start_time = time.perf_counter()
    tasks = [httpx_client.get("https://daeeros.ru") for _ in range(500)]
    await asyncio.gather(*tasks)
    end_time = time.perf_counter()
    text += f"HTTPX: {end_time - start_time:.2f} seconds"

    start_time = time.perf_counter()
    tasks = [aiohttp_client.get("https://daeeros.ru") for _ in range(500)]
    await asyncio.gather(*tasks)
    end_time = time.perf_counter()
    text += f"AIOHTTP: {end_time - start_time:.2f} seconds"
finally:
    await aiohttp_client.close()
    await httpx_client.aclose()

print(text)

Итоговый резлуьтат теста: image

michaelkryukov commented 7 months ago

Выглядит как дубликат #71

daeeros commented 7 months ago

Выглядит как дубликат #71

Можно тогда код с вашей практикой где у вас выходит иначе?

michaelkryukov commented 7 months ago

Разница между httpx и aiohttp в контексте производительности понятна – просто как я уже говорил, она не вызывает трудностей в работе ботов и т.д. Мотивация перехода уже описана в #71 и разрешение в форме "если будут какие-то проблемы – создавайте новые тикеты" всё ещё актуально. Пример в этом посте не является примером реальной проблемы.

В целом, если есть необходимость делать 500 одновременных запросов на какие-то ресурсы, которые не связаны с функционированием бота – можно и aiohttp использовать, kutana на это никакие ограничения не накладывает.