Python请求超时无法正常工作

Thi*_*lol 5 python request python-3.x python-requests

我正在使用以下代码来检查平均响应时间,因为我注意到它非常慢:

            t1 = time.time()
            response = requests.get(url, timeout=10, headers=headers)
            t2 = time.time()
            reqtimes += t2 - t1
            reqamount += 1
            print("Average response time:" + str(reqtimes/reqamount))
Run Code Online (Sandbox Code Playgroud)

当我在连接到大约 1000 个不同的站点后打印平均响应时间时,它告诉我平均响应时间为 70 秒。为什么?我的超时设置为 10 !

Jon*_*nts 8

timeout是允许来自服务器的任何响应的最长时间*。如果超时是 10 秒,并且服务器返回一个 100 字节的文件,每 9 秒一次一个字节,那么您将永远不会超时......但是您将有很长时间等待响应完成(总经过时间将为 900 秒)。例如:即使是一个超时为 10 秒的请求,其平均响应时间也为 15 分钟)。

值得注意的是,响应对象已经有一个.elapsed属性,它为您提供了一个timedelta对象,您可以使用它来避免time.time()自己使用和执行计算。

*转述自http://docs.python-requests.org/en/master/user/quickstart/#timeouts

timeout 不是整个响应下载的时间限制;相反,如果服务器在 timeout 秒内没有发出响应(更准确地说,如果在 timeout 秒内没有在底层套接字上接收到字节),则会引发异常。如果未明确指定超时,则请求不会超时。

  • 因此,如果“超时不是整个响应下载的时间限制”,即使您每隔几秒就获取字节,如何才能使整个响应超时 (3认同)