Python请求:测量等待响应的时间

3

我正试图使用Python的requests模块来测量POST请求后等待响应的时间。

据我所见,测量整个时间(即post()调用的持续时间)非常简单。同样,您可以使用elapsed方法测量从POST开始到第一个响应的时间。

然而,我无法计算在完全传递POST请求负载后等待响应的时间 - 上述两种方法都不是,并且总时间减去elapsed是响应的持续时间。如果不知道何时完成POST请求,就无法得知等待时间。

如何测量传输POST请求负载后等待响应的时间?

4个回答

0

为了测量发送请求后获得响应所需的时间,您可以这样做 -

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() 将为您提供服务器在接收请求后发送响应所花费的时间


很遗憾,如您所见,“elapsed”不能提供等待响应的时间。引用文档中的描述:“此属性专门衡量从发送请求的第一个字节到完成解析标题之间所花费的时间”......也就是说,它包括了发送请求的时间,这不是我想要的...我想要的是等待响应的时间(即在请求完全发送后)。 - KevinD

0
使用Python内置的http.client
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)

如需更高级的用法,请参考此代码片段


这将测量完成响应的时间(等待和传输数据),而不仅仅是等待响应的时间。 - KevinD
@KevinD 更新了,响应时间现在扩展到等待和下载时间。 - Meyti

0

要在Python中测量执行时间,您可以简单地使用以下代码:

from timeit import default_timer as timer
start = timer() 

''' Your request ''' 

end = timer() 
print(end - start)

谢谢您的回答,但这并没有帮助。调用是post() - 我对该调用所花费的时间不感兴趣,而是对等待响应所花费的时间感兴趣。因此,如果不深入了解requests的内部结构,timeit将无法发挥作用。 - KevinD

-1
@Kevin,你可以使用谷歌浏览器。在谷歌浏览器中,点击“检查”或按F12键,然后进入网络选项卡,查看任何API的响应时间。
三个部分:
1. 请求已发送:将请求有效载荷发送到服务器所需的时间。 2. 等待:等待从服务器获取响应的时间。 3. 内容下载:从响应中下载响应有效载荷所需的时间。
请查看附带的图片。

enter image description here


1
谢谢您的回答,但这不是一个网页,而是一个REST API。我需要在云上的生产Python工作负载(在Linux机器上)上持续地进行测量。所以Chrome(或任何浏览器)都不是一个选择。只能使用Python。 - KevinD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接