为了好玩,我在 python 中构建了一个下载管理器,有时与服务器的连接仍然打开,但服务器没有向我发送数据,因此(HTTPResponse 的)读取方法永远阻止了我。例如,当我从位于我所在国家/地区以外的服务器下载时,会发生这种情况,这会限制其他国家/地区的带宽。
如何为读取方法设置超时(例如 2 分钟)?
谢谢,尼尔。
最佳答案
如果你卡在某个 Python 版本上 < 2.6
,一种(不完美但可用的)方法是做
import socket
socket.setdefaulttimeout(10.0) # or whatever
开始使用之前 httplib
.文档是 here ,并明确说明 setdefaulttimeout
从 Python 2.3 开始可用——从您执行此调用到您再次调用同一函数的每个套接字都将使用 10 秒的超时时间。您可以使用 getdefaulttimeout在设置新的超时之前,如果你想保存以前的超时(包括没有)以便你可以稍后恢复它(用另一个 setdefaulttimeout
)。
当您需要使用一些使用 Python 的较旧的高级库时,这些函数和习惯用法非常有用 socket
s 但没有给你设置超时的好方法(当然最好使用更新的更高级别的库,例如 2.6 附带的 httplib
版本或第三方的 httplib2
在这种情况下,但这是并不总是可行,使用默认超时设置可能是一个很好的解决方法)。
关于python - 在python中将超时设置为http响应读取方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2573044/