2015-04-15 12 views
10

पायथन 3.4 क्या है। urllib.request.urlopen() में डिफ़ॉल्ट टाइमआउट क्या है यह जानने का प्रयास कर रहा है।वैश्विक डिफ़ॉल्ट टाइमआउट

इसकी हस्ताक्षर है: urllib.request.urlopen (यूआरएल, डेटा = कोई नहीं, [टाइमआउट] *, CAFile = कोई नहीं, capath = कोई नहीं, cadefault = झूठी, संदर्भ = कोई नहीं)

doc कहते हैं यह "वैश्विक डिफ़ॉल्ट टाइमआउट" है, और कोड को देख रहा है: socket._GLOBAL_DEFAULT_TIMEOUT

फिर भी सेकंड में वास्तविक मूल्य क्या है?

उत्तर

13

मुझे संदेह है कि यह कार्यान्वयन-निर्भर है। जिसके अनुसार, CPython के लिए: समारोह:

socket.create_connection से,

नहीं हैं टाइमआउट आपूर्ति की है, वैश्विक डिफ़ॉल्ट टाइमआउट द्वारा दिया सेटिंग 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); 
} 

एक ही फाइल में Earlier,

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

तो यह उर्फ ​​NonePy_None की तरह दिखता है, डिफ़ॉल्ट टाइमआउट है। दूसरे शब्दों में, urlopen कभी भी बाहर नहीं। कम से कम पायथन अंत से नहीं। मुझे लगता है कि ओएस द्वारा प्रदान किए गए नेटवर्किंग कार्यों में टाइमआउट स्वयं होने पर एक टाइमआउट अभी भी हो सकता है।


संपादित करें: उफ़, मुझे लगता है मैं सब पर जवाब के लिए स्रोत डाइविंग जाने के लिए है, क्योंकि यह सही docs में है जरूरत नहीं थी।

None का मान इंगित करता है कि नई सॉकेट ऑब्जेक्ट्स में कोई टाइमआउट नहीं है। जब सॉकेट मॉड्यूल पहले आयात किया जाता है, तो डिफ़ॉल्ट None होता है।

+0

तो ... यह लिनक्स कर्नेल से दिखता है? – confiq

संबंधित मुद्दे