2012-08-02 106 views
3

儘管我將socket設置爲非阻塞,seclect()函數仍然被阻塞。請幫幫我。爲什麼select()始終在非阻塞模式下被阻塞

這是我的代碼:

import socket 
import select 
if __name__ == '__main__': 
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
    server.bind(("localhost",9006)) 
    server.listen(10) 
    server.setblocking(False) 
    inputs = [server] 
    while True: 
     try: 
     a,b,c = select.select(inputs, [], []) 
     except Exception: 
     print ("exception") 
     print ("Timeout") 
+0

注:在這裏,我只運行服務器,而無需客戶端連接到它 – nguyenngoc101 2012-08-02 02:14:22

回答

12

select docs

可選的超時參數指定超時以秒爲一個浮點數。當省略超時參數時,該功能將阻塞,直到至少有一個文件描述符就緒。

換句話說,套接字'阻塞'狀態在這裏不相關。您需要指定任何超時以禁用阻止;您可以設置0,以便在沒有任何內容需要讀取時立即返回(但請注意,您的循環將佔用CPU大量CPU)。

例如:

a,b,c = select.select(inputs, [], [], 0) 
+0

我已經解決了這個問題,太感謝你了:) – nguyenngoc101 2012-08-02 02:52:15