Ответ
Существует несколько способов измерить время, затраченное на 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, которые предоставляют агрегированные метрики времени ответа.