两种通过python请求测量请求时间的方法之间存在巨大差距

时间:2018-01-04 09:25:33

标签: python http python-requests

我正在尝试使用python-requests来测量某个请求的响应时间。

import requests
import time

start = time.time()
r = requests.get("https://www.dl.soc.i.kyoto-u.ac.jp/index.php/members/")
end = time.time()

print(end - start)
print(r.elapsed.seconds)

它给了我

的结果
64.67747116088867
0.631163

有谁能解释这个巨大差距的原因?谢谢。 顺便说一句,当我在Google-Chrome上尝试相同的请求时,实际上第一个结果就是我想要的。

1 个答案:

答案 0 :(得分:0)

我使用人为推迟的网络服务器进行了一些测试:

nc -l 8080

然后在Python会话的另一个终端中:

import time, requests
a=time.time()
r = requests.get("http://localhost:8080/")
b=time.time()
print r.elapsed, b-a

粘贴此服务器终端发出此HTTP请求:

GET / HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.9.1

我等了5秒钟,然后我在服务器上粘贴了这个回复:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 12
Connection: keep-alive
Keep-Alive: timeout=15
Date: Thu, 04 Jan 2018 10:12:09 GMT
Server: Apache
Last-Modified: Wed, 09 Dec 2015 13:57:24 GMT
ETag: "28bd-52677784b6090"
Accept-Ranges: bytes

hello

我说了12个字节,但只发送了6个(hello\n),所以这是未完成的。我又等了五秒钟,然后粘贴了这段文字:

world

这使用剩余的六个字节(world\n)完成了回复。在客户端终端,我看到结果显示:

0:00:05.185509 10.8904578686

因此,显然r.elapsed是首先时间字节(TTFB),而对requests.get()的调用仅在收到整个消息后终止(时间到最后字节) ,TTLB)。