Ответ
Существует несколько способов измерить время, затраченное на HTTP-запрос в Python, выбор зависит от используемой библиотеки и необходимой точности.
1. Стандартный модуль time
Самый простой подход для быстрых замеров в скриптах. Он измеряет общее время, включая установку соединения, отправку запроса и получение ответа.
import time
import requests
start_time = time.monotonic()
try:
response = requests.get('https://api.github.com')
response.raise_for_status() # Проверка на HTTP-ошибки
finally:
end_time = time.monotonic()
elapsed_seconds = end_time - start_time
print(f"Запрос занял: {elapsed_seconds:.4f} секунд")
Использование time.monotonic() предпочтительнее time.time(), так как оно не подвержено изменениям системного времени.
2. Встроенные возможности requests
Библиотека requests автоматически измеряет время от отправки запроса до получения заголовков ответа и сохраняет его в атрибуте response.elapsed. Это самый удобный и идиоматичный способ.
import requests
response = requests.get('https://api.github.com')
# response.elapsed - это объект timedelta
elapsed_seconds = response.elapsed.total_seconds()
print(f"Запрос занял: {elapsed_seconds:.4f} секунд")
3. Современная библиотека httpx
httpx, как и requests, предоставляет атрибут elapsed для синхронных и асинхронных запросов.
import httpx
with httpx.Client() as client:
response = client.get('https://api.github.com')
elapsed_seconds = response.elapsed.total_seconds()
print(f"Запрос занял: {elapsed_seconds:.4f} секунд")
Для production-систем рекомендуется использовать специализированные APM-решения (Application Performance Monitoring) или системы мониторинга, такие как Prometheus, которые предоставляют агрегированные метрики времени ответа.
Ответ 18+ 🔞
Ну, слушай, тут такая хуйня, блядь. Хочешь померить, сколько твой запрос в интернеты ползает? Вариантов, как говна за баней, но есть парочка годных, которые не заставят тебя, сука, мозги выносить.
1. Старый добрый time, он и в Африке time
Прям как дедовский метод, блядь. Взял секундомер, нажал — пошёл запрос, пришёл ответ — выключил. Всё, пиздец, просто. Только учти, он меряет ВСЁ: и то, как ты там с сервером знакомишься, и как данные плетёшься, и как ответ приползает обратно. Овердохуища, короче.
import time
import requests
start_time = time.monotonic()
try:
response = requests.get('https://api.github.com')
response.raise_for_status() # Проверка на HTTP-ошибки
finally:
end_time = time.monotonic()
elapsed_seconds = end_time - start_time
print(f"Запрос занял: {elapsed_seconds:.4f} секунд")
Кстати, ёпта, бери monotonic(), а не эту старую time(). Та ещё может подвести, если системные часы вдруг решат, что они в прошлом живут, блядь. А monotonic() — он как часы в армии, только вперёд, сука.
2. Магия внутри requests — response.elapsed
А вот это уже красота, блядь! Сама библиотека, хитрая жопа, засекает время от момента "полетели!" до момента "ой, всё, приплыли!". И кладёт это время прямо в ответ, в атрибут elapsed. Красота, ёперный театр! Самый правильный способ, если ты, конечно, не из тех, кто любит велосипеды собирать.
import requests
response = requests.get('https://api.github.com')
# response.elapsed - это объект timedelta
elapsed_seconds = response.elapsed.total_seconds()
print(f"Запрос занял: {elapsed_seconds:.4f} секунд")
3. Модный молодёжный httpx
Ну а это, блядь, для тех, кто в теме. Тот же принцип, что и у requests, только с перчинкой и асинхронностью. Тоже есть этот волшебный elapsed.
import httpx
with httpx.Client() as client:
response = client.get('https://api.github.com')
elapsed_seconds = response.elapsed.total_seconds()
print(f"Запрос занял: {elapsed_seconds:.4f} секунд")
А если ты, сука, серьёзный дядя и у тебя там продакшн, где всё падает в пятницу вечером, то забей на эти ручные замеры. Бери нормальные системы мониторинга, вроде Prometheus или какие там APM-решения. Они тебе не только время покажут, но и графики нарисуют, и предупредят, когда всё накроется медным тазом. Но это уже совсем другая история, в рот меня чих-пых.