2015-04-15 22 views
10

Python 3.4. Cố gắng tìm thời gian chờ mặc định là gì trong urllib.request.urlopen().Thời gian chờ mặc định toàn cầu là gì

chữ ký của nó là: urllib.request.urlopen (url, data = None, [thời gian chờ,] *, CAFile = None, capath = None, cadefault = False, context = Không)

Các doc nói rằng "thời gian chờ mặc định toàn cầu" và xem mã của nó: socket._GLOBAL_DEFAULT_TIMEOUT

Giá trị thực tế trong giây là bao nhiêu?

Trả lời

13

Tôi nghi ngờ điều này phụ thuộc vào việc triển khai thực hiện. Điều đó nói rằng, đối với CPython:

Từ socket.create_connection,

Nếu không timeout được cung cấp, thời gian chờ mặc định toàn cầu thiết lập được trả về bởi: func: getdefaulttimeout được sử dụng.

Từ 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 trong cùng một tập tin,

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

Vì vậy, nó trông giống như Py_None, aka None, là thời gian chờ mặc định. Nói cách khác, urlopen không bao giờ hết giờ. Ít nhất không phải từ đầu Python. Tôi đoán một thời gian chờ vẫn có thể xảy ra nếu các chức năng mạng được cung cấp bởi hệ điều hành có thời gian chờ mình.


Edit: oops, tôi đoán tôi không cần phải đi lặn nguồn cho câu trả lời ở tất cả, vì nó ở ngay trong docs.

Giá trị None cho biết các đối tượng ổ cắm mới không có thời gian chờ. Khi mô-đun ổ cắm được nhập lần đầu tiên, mặc định là None.

+0

vì vậy ... nó trông từ hạt nhân Linux? – confiq

Các vấn đề liên quan