Как измерить время запроса с 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()