【问题标题】:Using httplib2 in python 3 properly? (Timeout problems)在 python 3 中正确使用 httplib2? (超时问题)
【发布时间】:2010-01-30 06:52:54
【问题描述】:

嘿,第一次发帖,我真的被 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 对象(沿着“除”路径)......我不明白如何继续使用同一个对象,直到它过期并且我制作另一个。另外,有没有办法为单个请求设置超时?

感谢您的帮助!

【问题讨论】:

    标签: python timeout python-3.x httplib2


    【解决方案1】:

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

    【讨论】:

    • 漏洞现已关闭
    【解决方案2】:

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

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

    如果您在该代码中耗尽内存,则 httplib2 无法正确收集垃圾。可能是你有循环引用(尽管它看起来不像上面那样)或者它可能是 httlib2 中的一个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2011-06-30
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      相关资源
      最近更新 更多