как получить response_time и response_size при использовании aiohttp - PullRequest
0 голосов
/ 11 июля 2019

Можно ли получить время отклика и размер ответа для каждого запроса, сделанного с помощью aiohttp?

В документации, похоже, нигде нет этих свойств.

Спасибо

1 Ответ

0 голосов
/ 13 июля 2019

Возможны следующие варианты:

  • измерение момента времени до запроса
  • измерение момента времени после запроса
  • разница в времени ответа
  • с помощью response.text () вы получите ответ и можете определить длину с помощью len ()

Небольшой автономный пример может выглядеть так:

import time
import asyncio
from aiohttp import ClientSession


async def fetch(session, url):
    start = time.time()
    async with session.get(url) as response:
        result = await response.text()
        end = time.time()
        print(url, ": ", end - start, "response length:", len(result))
        return result


async def crawl(urls: set):
    async with ClientSession() as session:
        tasks = []
        for url in urls:
            tasks.append(
                fetch(session, url)
            )
        await asyncio.gather(*tasks)


if __name__ == "__main__":
    urlSet = {"https://www.software7.biz/tst/number.php",
              "https://www.software7.biz/tst/number1.php",
              "https://www.software7.biz"}
    asyncio.run(crawl(urlSet))

Тест

Две конечные точки number.php и number1.php имеют задержку на стороне сервера 3 соответствующих 1 секунды и возвращают двузначное число каждый.

Выходные данные в консоли отладки выглядят так:

https://www.software7.biz :  0.16438698768615723 response length: 4431
https://www.software7.biz/tst/number1.php :  1.249755859375 response length: 2
https://www.software7.biz/tst/number.php :  3.214473009109497 response length: 2
...