Как измерить время запроса с request_futures даже при возникновении исключения?

Я хотел бы измерить время HTTP-запроса с python request_futures даже при возникновении исключения.

Хотя elapsed наследуется от оригинала requests Модуль может быть использован для измерения успешного запроса. Но его нельзя использовать для измерения неудавшегося запроса.

s.get("http://127.0.0.1").elapsed.total_seconds()

Есть ли хороший способ измерить время, даже когда возникает исключение? Благодарю.

0 ответов

Это интересный вопрос. Вы можете добавить таймер в функцию отправки, которая в HTTPAdapter. Но есть недостаток в том, что вы будете получать все записи времени (включая перенаправление). Кстати, я пытаюсь добавить таймер в session.send но он возвращает неожиданную запись времени.

import requests
from requests.adapters import HTTPAdapter
import time
from datetime import timedelta

def new_adapter():
    adapter =  HTTPAdapter()
    def new_send(request, **kwargs):
        start = time.perf_counter()
        try:
            resp = HTTPAdapter().send(request,**kwargs)
        except Exception as e:
            raise e
        finally:
            elapsed = time.perf_counter() - start
            elapsed = timedelta(seconds=elapsed)
            print("From new_adapter {}".format(elapsed.total_seconds()))
        return resp
    adapter.send = new_send
    return adapter

with requests.Session() as s:
    s.mount('https://', new_adapter())
    s.mount('http://', new_adapter())
    for url in ["http://127.0.0.1","http://github.com"]:
        try:
            starts = time.perf_counter()
            resp = s.get(url)
            elapsed = resp.elapsed.total_seconds()
        except Exception as e:
            elapsed = None
            #raise e
        print("From rough {}".format(timedelta(seconds=time.perf_counter() - starts).total_seconds()))
        print("From elapsed {}".format(elapsed))
        print()
Другие вопросы по тегам