python request timeout urllib

python - ¿Cuál es el tiempo de espera predeterminado global



request timeout (1)

Python 3.4. Intentando encontrar cuál es el tiempo de espera predeterminado en urllib.request.urlopen ().

Su firma es: urllib.request.urlopen (url, data = None, [timeout,] *, cafile = None, capath = None, cadefault = False, context = None)

El doc dice que es su "tiempo de espera predeterminado global", y mirando el código es: socket._GLOBAL_DEFAULT_TIMEOUT

¿Todavía cuál es el valor real en segundos?


Sospecho que esto depende de la implementación. Dicho esto, para CPython:

Desde socket.create_connection ,

Si no se proporciona un tiempo de espera , se utiliza la configuración de tiempo de espera predeterminada global devuelta por: func: getdefaulttimeout .

Desde 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 en el mismo archivo,

static double defaulttimeout = -1.0; /* Default timeout for new sockets */

Así que parece que Py_None , alias None , es el tiempo de espera predeterminado. En otras palabras, urlopen nunca se agota. Al menos no desde el final de Python. Supongo que aún puede producirse un tiempo de espera si las funciones de red proporcionadas por el sistema operativo tienen tiempos de espera.

Edit: oops, supongo que no necesitaba ir a buscar por la respuesta, ya que está justo ahí en los docs .

Un valor de None indica que los nuevos objetos de socket no tienen tiempo de espera. Cuando el módulo de socket se importa por primera vez, el valor predeterminado es None .