Ответ 1
Я подозреваю, что это зависит от реализации. Тем не менее, для CPython:
Если тайм-аут не указан, используется глобальная настройка таймаута по умолчанию, возвращаемая функцией: func:
getdefaulttimeout
.
Из socketmodule.c
,
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 */
Таким образом, это выглядит как Py_None
, aka None
, это тайм-аут по умолчанию. Другими словами, urlopen
никогда не истекает. По крайней мере, не с конца Python. Я предполагаю, что тайм-аут все равно может произойти, если сетевые функции, предоставляемые ОС, имеют тайм-ауты сами.
Edit: oops, мне кажется, мне не нужно было переходить на исходный дайвинг для ответа, так как он находится прямо в docs.
Значение
None
указывает, что новые объекты сокета не имеют таймаута. Когда сначала импортируется модуль сокета, по умолчанию используетсяNone
.