即使出现异常,如何用requests_futures测量请求的时间



即使发生异常,我也会用python requests_futures来测量HTTP请求的时间。

尽管从原始requests模块继承的elapsed可以用于测量成功的请求。但它不能用于衡量失败的请求。

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

即使发生异常,是否有一种好的方法来测量时间?谢谢

这是一个有趣的问题。您可以在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()

最新更新