Python 3.4 urllib.request.urlopen()のデフォルトのタイムアウトを見つけようとしています。
その署名は次のとおりです:urllib.request.urlopen(url、data = None、[timeout、] *、cafile = None、capath = None、cadefault = False、context = None)
doc は、「グローバルなデフォルトのタイムアウト」であり、コードを見ると次のようになります。socket._GLOBAL_DEFAULT_TIMEOUT
それでも秒単位の実際の値は何ですか?
これは実装に依存すると思われます。つまり、CPythonの場合:
timeoutが指定されていない場合、: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
、別名None
はデフォルトのタイムアウトです。つまり、urlopen
はタイムアウトしません。少なくともPython end。からではありません。OSが提供するネットワーク機能自体にタイムアウトがあると、タイムアウトが発生する可能性があります。
編集:おっと、私はそれが docs の中にあるので、答えのためにソースダイビングに行く必要はなかったと思います。
None
の値は、新しいソケットオブジェクトにタイムアウトがないことを示します。ソケットモジュールが最初にインポートされるとき、デフォルトはNone
です。