我正试图使用Python的requests模块来测量POST
请求后等待响应的时间。
据我所见,测量整个时间(即post()
调用的持续时间)非常简单。同样,您可以使用elapsed方法测量从POST
开始到第一个响应的时间。
然而,我无法计算在完全传递POST
请求负载后等待响应的时间 - 上述两种方法都不是,并且总时间减去elapsed
是响应的持续时间。如果不知道何时完成POST
请求,就无法得知等待时间。
如何测量传输POST
请求负载后等待响应的时间?
我正试图使用Python的requests模块来测量POST
请求后等待响应的时间。
据我所见,测量整个时间(即post()
调用的持续时间)非常简单。同样,您可以使用elapsed方法测量从POST
开始到第一个响应的时间。
然而,我无法计算在完全传递POST
请求负载后等待响应的时间 - 上述两种方法都不是,并且总时间减去elapsed
是响应的持续时间。如果不知道何时完成POST
请求,就无法得知等待时间。
如何测量传输POST
请求负载后等待响应的时间?
为了测量发送请求后获得响应所需的时间,您可以这样做 -
response = requests.get(url)
response_data = {}
if response.status_code == 200:
response_data['status_code'] = response.status_code
response_data['headers'] = dict(response.headers)
response_data['elapsed'] = response.elapsed.total_seconds()
在这里,line response.elapsed.total_seconds() 将为您提供服务器在接收请求后发送响应所花费的时间
from time import time
from http.client import HTTPConnection, HTTPResponse
class TimedHTTPResponse(HTTPResponse):
_statusts = None
def _read_status(self, *args, **kwargs):
r = super()._read_status(*args, **kwargs)
if self._statusts is None: # in case of HTTP:100
self._statusts = time()
return r
conn = HTTPConnection("localhost:8081")
conn.response_class = TimedHTTPResponse
ts1 = time()
conn.request("GET", "/get")
ts2 = time()
print("Request time\t", ts2 - ts1) # curl:time_connect
res = conn.getresponse()
print("Waiting (TTFB)\t", res._statusts - ts2) # curl:time_starttransfer
body = res.read()
ts3 = time()
print("Download time\t", ts3 - res._statusts)
print("Total time\t", ts3 - ts1) # curl:time_total
print("Response status\t", res.status, res.reason)
如需更高级的用法,请参考此代码片段。
要在Python中测量执行时间,您可以简单地使用以下代码:
from timeit import default_timer as timer
start = timer()
''' Your request '''
end = timer()
print(end - start)
post()
- 我对该调用所花费的时间不感兴趣,而是对等待响应所花费的时间感兴趣。因此,如果不深入了解requests
的内部结构,timeit
将无法发挥作用。 - KevinD