在Python 3中正确使用httplib2?(超时问题)

4 投票
2 回答
3571 浏览
提问于 2025-04-15 18:40

嘿,这是我第一次发帖,我在使用httplib2的时候遇到了麻烦。我在diveintopython3.org上查了一些资料,但上面没有提到超时功能。我查了文档,看到可以设置一个超时的整数,但没有说明单位是什么(是秒还是毫秒?如果设置为None,默认值是什么?)这是我现在的代码(我还有代码可以检查响应并重试,但从来没有尝试超过一次)

h = httplib2.Http('.cache', timeout=None)
for url in list:
    response, content = h.request(url)
    more stuff...

所以Http对象会一直存在,直到某个随意的时间。但我从同一个服务器下载了很多页面,过了一段时间,它在获取页面时就卡住了。没有错误抛出,页面就是一直卡在那里。然后我尝试:

h = httplib2.Http('.cache', timeout=None)
for url in list:
    try:
        response, content = h.request(url)
    except:
        h = httplib2.Http('.cache', timeout=None)
    more stuff...

但每次都重新创建一个Http对象(走到了'except'的路径)……我不明白怎么才能继续使用同一个对象,直到它过期,然后再创建另一个。还有,是否有办法为单个请求设置超时?

谢谢你的帮助!

2 个回答

4

由于一个错误,httplib2在版本0.7.5之前(2012年8月28日)测量超时时间时,是用秒数乘以2来计算的。

1

把超时时间设置为1,你很快就能知道这个1是指一毫秒还是一秒。

我不太明白你想用try/except解决什么问题,如果在某种情况下h.request(url)卡住了,那在另一种情况下也应该会卡住。

如果你在那段代码中内存用完了,那可能是httplib2没有被正确清理掉。可能是你有循环引用(虽然看起来上面没有),或者这可能是httplib2的一个bug。

撰写回答