Как измерить время выполнения HTTP-запроса в Python

«Как измерить время выполнения HTTP-запроса в Python» — вопрос из категории Devops, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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