【问题标题】:urllib.request.urlopen timeout without internet没有互联网的 urllib.request.urlopen 超时
【发布时间】:2018-08-21 04:37:03
【问题描述】:

urllib.request.urlopen 有一个timeout 选项。但是,当我的互联网中断时,该选项似乎不起作用。

import urllib
urllib.request.urlopen(url, timeout=1)

挂起并最终放弃

URLError: <urlopen error [Errno -3] Temporary failure in name resolution>

当我的网络中断时,如何设置超时?

【问题讨论】:

    标签: python python-3.x request urllib urlopen


    【解决方案1】:

    这不是微不足道的。您的 DNS 超时,因为您的系统无法确定如何处理给定的 URL。但是,正如 David Murray 所说,这是不受 python 控制的:https://bugs.python.org/issue22889

    您可能希望使用此自定义超时实现:Timeout function if it takes too long to finish

    【讨论】:

    • 感谢您的链接。看来真的没有什么好的解决办法。
    【解决方案2】:

    您可以阅读此post。它很好地解释了目前timeout 是一个非常模糊的概念。即使在声称“为人类”的requests 中,timeout 也不是真正的人类。

    在您的情况下,名称解析是 http 连接之前的预处理,但 timeout 仅适用于 http(s) 和 ftp 连接。

    要获得timeout 的一致行为,我想最好的方法是使用线程。或者您可以使用signal.alarm,但它只适用于 UNIX 系统。

    【讨论】:

      猜你喜欢
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      相关资源
      最近更新 更多