Как измерить время запроса с request_futures даже при возникновении исключения? - PullRequest
0 голосов
/ 01 декабря 2018

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

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

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

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

1 Ответ

0 голосов
/ 02 декабря 2018

Это интересный вопрос.Вы можете добавить таймер в функцию отправки, которая в 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()
...