Python请求超时未正常工作

7
我正在使用以下代码检查平均响应时间,因为我注意到它非常慢:
            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))

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

1个回答

14
timeout是允许从服务器获得任何响应的最长时间。如果超时时间为10秒,服务器返回一个100字节的文件,每9秒钟以1个字节的速度返回,那么您将永远不会超时...但等待响应完成需要很长时间(总计经过900秒)。例如:即使是设置10秒超时的单个请求,其平均响应时间也将达到15分钟。 值得注意的是,响应对象已经具有一个.elapsed属性,该属性给出了可以使用timedelta对象避免使用time.time()并自行执行计算的响应时间。 来源:http://docs.python-requests.org/en/master/user/quickstart/#timeouts :如果超时时间没有明确指定,则不会超时请求,timeout不是整个响应下载的时间限制;相反,如果服务器在超时时间内(更准确地说,如果在基础套接字上没有接收到任何字节的情况下)未发出响应,则会引发异常。

11
如果"timeout不是对整个响应下载设置的时间限制",那么即使每隔几秒钟收到字节,你如何超时整个响应呢? - Diego Suarez

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