首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python请求模块不处理超时,如果是streams=True?

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

Stack Overflow用户
提问于 2015-01-19 05:43:20
回答 2查看 3.5K关注 0票数 1

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

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

但我偶尔会遇到一个url没有响应。所以我放入了timeout=3。

但它们永远不会超时。他们就这么挂着。如果我删除了'streams=True‘,它会正确超时。流和超时不能一起工作有什么原因吗?删除streams=True会强制我获取所有内容。

执行此操作:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2015-01-19 06:02:00

有一个相关的github问题:

修复方法是included into requests==2.3.0 version

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

票数 4
EN

Stack Overflow用户

发布于 2015-01-19 05:58:24

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28015146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档