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

Bra*_*rad 2 python python-requests

我正在使用 Python 请求模块获取一批 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
Run Code Online (Sandbox Code Playgroud)

ale*_*cxe 5

有一个相关的github问题:

该修复已包含在requests==2.3.0版本中。

使用最新版本对其进行了测试 - 对我有用。