Python 3.4。 试图找到urllib.request.urlopen()中的默认超时。
它的签名是: urllib.request.urlopen(url,data = None,[timeout,] *,cafile = None,capath = None,cadefault = False,context = None)
doc表示其“全局默认超时”,并查看代码: socket._GLOBAL_DEFAULT_TIMEOUT
秒中的实际值是多少?
答案 0 :(得分:23)
我怀疑这是依赖于实现的。那说,对于CPython:
如果未提供 timeout ,则使用由:func:
getdefaulttimeout
返回的全局默认超时设置。
static PyObject *
socket_getdefaulttimeout(PyObject *self)
{
if (defaulttimeout < 0.0) {
Py_INCREF(Py_None);
return Py_None;
}
else
return PyFloat_FromDouble(defaulttimeout);
}
Earlier在同一个文件中,
static double defaulttimeout = -1.0; /* Default timeout for new sockets */
所以看起来Py_None
,即None
,是默认超时。换句话说,urlopen
永远不会超时。至少不是来自Python端。我想如果操作系统提供的网络功能本身有超时的话,仍然会发生超时。
编辑:哎呀,我想我根本不需要去寻找答案,因为它正好在docs。
值
None
表示新套接字对象没有超时。首次导入套接字模块时,默认值为None
。