什么是全局默认超时
What is the global default timeout
Python 3.4 。
试图找到 urllib.request.urlopen() 中的默认超时是什么。
它的签名是:
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
doc 表示它是 "global default timeout",并查看代码:
socket._GLOBAL_DEFAULT_TIMEOUT
实际的秒数是多少?
我怀疑这取决于实现。也就是说,对于 CPython:
If no timeout is supplied, the global default timeout setting returned by :func:getdefaulttimeout
is used.
来自 socketmodule.c
,
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 结束。我想如果 OS 提供的网络功能本身有超时,仍然会发生超时。
编辑:哎呀,我想我根本不需要去寻找答案,因为它就在 docs.
中
A value of None
indicates that new socket objects have no timeout. When the socket module is first imported, the default is None
.
Python 3.4 。 试图找到 urllib.request.urlopen() 中的默认超时是什么。
它的签名是: urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
doc 表示它是 "global default timeout",并查看代码: socket._GLOBAL_DEFAULT_TIMEOUT
实际的秒数是多少?
我怀疑这取决于实现。也就是说,对于 CPython:
If no timeout is supplied, the global default timeout setting returned by :func:
getdefaulttimeout
is used.
来自 socketmodule.c
,
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 结束。我想如果 OS 提供的网络功能本身有超时,仍然会发生超时。
编辑:哎呀,我想我根本不需要去寻找答案,因为它就在 docs.
中A value of
None
indicates that new socket objects have no timeout. When the socket module is first imported, the default isNone
.