如果streams = True,Python Requests模块不处理超时?

时间:2015-01-18 21:43:20

标签: python python-requests

我正在使用Python Requests模块获取一批url。我首先想要只读取它们的标题,以获得实际的url和响应大小。然后我得到任何通过的实际内容。

所以我使用'streams = True'来延迟获取内容。这通常很好。

但是我偶尔遇到一个没有回应的网址。所以我输入超时= 3。

但那些永远不会超时。他们只是挂了。如果我删除'streams = True',它会正确超时。是否有一些原因流和超时不应该一起工作?删除streams = True迫使我获取所有内容。

这样做:

import requests
url = 'http://bit.ly/1pQH0o2'
x = requests.get(url) # hangs
x = requests.get(url, stream=True) # hangs
x = requests.get(url, stream=True, timeout=1) # hangs
x = requests.get(url, timeout=3) # times out correctly after 3 seconds

2 个答案:

答案 0 :(得分:3)

有一个相关的github问题:

修复程序为included into requests==2.3.0 version

使用最新版本测试 - 为我工作。

答案 1 :(得分:1)

你是否关闭了回复?未关闭和部分读取的响应可以与同一资源建立多个连接,并且站点可能具有单个IP的连接限制。