4

嘿,第一次发帖,我真的被困在 httplib2 上。我一直在从diveintopython3.org 阅读它,但它没有提到超时功能。我查看了文档,但我唯一看到的是能够设置 timeout 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 对象(沿着“除外”路径)......我不明白如何继续使用同一个对象,直到它过期并且我制作另一个。另外,有没有办法为单个请求设置超时?

谢谢您的帮助!

4

2 回答 2

4

由于 bug, httplib2 以秒为单位测量超时乘以 2 ,直到版本 0.7.5 (2012-08-28)。

于 2012-07-24T16:11:37.503 回答
1

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

我不知道您的 try/except 应该解决什么问题,如果它在一种情况下挂在 h.request(url) 上,它应该挂在另一种情况下。

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

于 2010-01-30T08:46:52.720 回答