Python 3.4. Essayer de trouver quel est le délai d'expiration par défaut dans urllib.request.urlopen ().
Sa signature est: urllib.request.urlopen (url, data = None, [timeout,] *, cafile = None, capath = None, cadefault = False, context = None)
Le doc dit que son "timeout global par défaut", et en regardant le code son: socket._GLOBAL_DEFAULT_TIMEOUT
Quelle est toujours la valeur réelle en secondes?
Je soupçonne que cela dépend de la mise en œuvre. Cela dit, pour CPython:
Si aucun délai d'expiration n'est fourni, le paramètre d'expiration global par défaut renvoyé par: func:
getdefaulttimeout
est utilisé.
De socketmodule.c
,
static PyObject *
socket_getdefaulttimeout(PyObject *self)
{
if (defaulttimeout < 0.0) {
Py_INCREF(Py_None);
return Py_None;
}
else
return PyFloat_FromDouble(defaulttimeout);
}
plus tôt dans le même fichier,
static double defaulttimeout = -1.0; /* Default timeout for new sockets */
Il ressemble donc à Py_None
, alias None
, est le délai d'expiration par défaut. En d'autres termes, urlopen
n'expire jamais. Du moins pas depuis la fin Python. Je suppose qu'un timeout peut toujours se produire si les fonctions de mise en réseau fournies par l'OS ont elles-mêmes des timeouts.
Edit: oups, je suppose que je n'avais pas du tout besoin de plonger à la source pour la réponse, car il est juste là dans le docs .
Une valeur de
None
indique que les nouveaux objets socket n'ont pas de délai d'expiration. Lorsque le module socket est importé pour la première fois, la valeur par défaut estNone
.