Python 什么是全局默认超时

Python 什么是全局默认超时,python,request,timeout,urllib,Python,Request,Timeout,Urllib,Python 3.4。 正在尝试查找urllib.request.urlopen()中的默认超时 其签名为: urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None) 表示其“全局默认超时”,并查看其代码: 套接字。\u全局\u默认\u超时 但是,以秒为单位的实际值是多少?我怀疑这取决于实现。也就是说,对于CPython来说: 从 如果未提供超时,则

Python 3.4。 正在尝试查找urllib.request.urlopen()中的默认超时

其签名为: urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)

表示其“全局默认超时”,并查看其代码: 套接字。\u全局\u默认\u超时


但是,以秒为单位的实际值是多少?

我怀疑这取决于实现。也就是说,对于CPython来说:

如果未提供超时,则使用:func:
getdefaulttimeout
返回的全局默认超时设置

所以它看起来像是默认的超时时间。换句话说,
urlopen
从不超时。至少不是从Python端开始的。我想,如果操作系统提供的网络功能本身有超时,则仍然可能发生超时


编辑:哎呀,我想我根本不需要去寻找答案,因为答案就在地图上

None
表示新套接字对象没有超时。首次导入套接字模块时,默认值为
None


所以从Linux内核看,当您使用
urllib2.urlopen(link)
vs
urllib2.urlopen(link,timeout=1)
时,这会导致一些困难的调试。很高兴我找到了这个答案。@teewuane不是真的。不管怎样,您通常都会使用stderr进行日志记录。如果您现在意识到自己在处理空闲时间,那么可以发送一个SIGINT并获取日志的最新跟踪:
example=request.urlopen([…])文件“/usr/lib/python3.7/urllib/request.py”,第222行,在urlopen[…]文件“/usr/lib/python3.7/ssl.py”,第1117行,在do_handshake self中键盘中断
但我不认为
是合理的默认超时。。。
static PyObject *
socket_getdefaulttimeout(PyObject *self)
{
    if (defaulttimeout < 0.0) {
        Py_INCREF(Py_None);
        return Py_None;
    }
    else
        return PyFloat_FromDouble(defaulttimeout);
}
static double defaulttimeout = -1.0; /* Default timeout for new sockets */