Python 3.4 . Trying to find what is the default timeout in urllib.request.urlopen() .
Its signature is: urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
The doc says that its "global default timeout", and looking at the code its: socket._GLOBAL_DEFAULT_TIMEOUT
Still what is the actual value in secs?
Global timeout is the maximum limit of simulation execution. This determines the end-of-test timeout. The default value of timeout is set to 9200s. One can also use run time plusarg +UVM_TIMEOUT=, to set the timeout value. Refer to this page for more information on UVM_TIMEOUT from command line processor.
If no timeout is supplied, the global default timeout setting returned by :func:getdefaulttimeout is used. So it looks like Py_None, aka None, is the default timeout. In other words, urlopen never times out. At least not from the Python end.
Here is my understanding, the reason for having _GLOBAL_DEFAULT_TIMEOUT is to have a global default timeout value that can be accessible via various application layer modules (like ftplib, httplib, urllib).
It would really save a lot of time to have a variable default timeout. For most workflows you only need a <5sec timeout and it would save SO MUCH time in the development as well. For most workflows you only need a <5sec timeout and it would save SO MUCH time in the development as well. Are you automating web with WAIT_FOR_READY = Complete?
I suspect this is implementation-dependent. That said, for CPython:
From socket.create_connection
,
If no timeout is supplied, the global default timeout setting returned by :func:
getdefaulttimeout
is used.
From 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 in the same file,
static double defaulttimeout = -1.0; /* Default timeout for new sockets */
So it looks like Py_None
, aka None
, is the default timeout. In other words, urlopen
never times out. At least not from the Python end. I guess a timeout can still occur if the networking functions supplied by the OS have timeouts themselves.
Edit: oops, I guess I didn't need to go source diving for the answer at all, since it's right there in the docs.
A value of
None
indicates that new socket objects have no timeout. When the socket module is first imported, the default isNone
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With