相关疑难解决方法(0)

使用urllib2或任何其他http库读取超时

我有读取这样的网址的代码:

from urllib2 import Request, urlopen
req = Request(url)
for key, val in headers.items():
    req.add_header(key, val)
res = urlopen(req, timeout = timeout)
# This line blocks
content = res.read()
Run Code Online (Sandbox Code Playgroud)

超时适用于urlopen()调用.但是然后代码进入res.read()调用,我想要读取响应数据,并且不会在那里应用超时.因此,读取调用可能几乎永远挂起,等待来自服务器的数据.我发现的唯一解决方案是使用一个信号来中断read(),因为我正在使用线程,所以不适合我.

还有哪些其他选择?是否有用于处理读取超时的Python的HTTP库?我看过httplib2和请求,他们似乎遇到了与上面相同的问题.我不想使用套接字模块编写自己的非阻塞网络代码,因为我认为应该已经有了一个库.

更新:以下解决方案都没有为我做.您可以自己查看设置套接字或urlopen超时在下载大文件时无效:

from urllib2 import urlopen
url = 'http://iso.linuxquestions.org/download/388/7163/http/se.releases.ubuntu.com/ubuntu-12.04.3-desktop-i386.iso'
c = urlopen(url)
c.read()
Run Code Online (Sandbox Code Playgroud)

至少在使用Python 2.7.3的Windows上,超时被完全忽略.

python sockets timeout http nonblocking

25
推荐指数
4
解决办法
1万
查看次数

HTTP请求超时

在Python 2.6中,一个新的"timeout"参数被添加到httplib.HTTPConnection类:http://docs.python.org/library/httplib.html#httplib.HTTPConnection

但是,这只是连接到服务器的超时.我期待为请求设置超时值,而不是连接.httplib似乎不支持这一点.

有没有办法模仿这种行为?

python http

2
推荐指数
3
解决办法
3万
查看次数

标签 统计

http ×2

python ×2

nonblocking ×1

sockets ×1

timeout ×1