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

时间:2010-01-30 06:52:54

标签: python timeout python-3.x httplib2

嘿,第一次发帖,我真的被困在httplib2上了。我一直在从diveintopython3.org上阅读它,但它没有提到超时功能。我查看文档,但我唯一看到的是能够设置超时int但是没有指定单位(秒?毫秒?如果没有什么是默认值?)这就是我所拥有的(我也有代码可以检查)响应是什么,然后再试一次,但它从来没有尝试过多次)

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 个答案:

答案 0 :(得分:4)

Due to bug httplib2以秒为单位测量超时乘以2 until version 0.7.5(2012-08-28)。

答案 1 :(得分:1)

将超时设置为1,您很快就会知道它是指一毫秒还是一秒。

我不知道你的尝试/除了应该解决什么,如果它挂在h.request(url)上,在一种情况下应该挂在另一种情况下。

如果该代码中的内存不足,则httplib2不会正确收集垃圾。可能是您有循环引用(虽然它看起来不像上面)或者它可能是httlib2中的错误。