2011-07-29 55 views
0

我有一個線程的$ 初始化調用下面的代碼:Python:爲什麼這個非阻塞調用recv塊?

self.conn = copy.deepcopy(conn) 
self.conn.setblocking(0) 

conn是一個插座,並作爲參數傳遞給$ 初始化 每個線程臨危獨特的插座傳遞。在run方法,我有:

self.running = True 
self.conn.send("Connected") 
print self.name, "has a timeout of", self.conn.gettimeout() 

while self.running: 
    try: 
     now = self.conn.recv(8192) 
     print "Recieved:", now, "\n\tFrom:", self.name 
     self.process(now) 
    except socket.error: 
     raise 

    print "hi from", self.name 
    time.sleep(1) 

超時打印爲0.0,但「喜從threadname」僅打印出來時,收到一條消息,異常從未提出!它看起來好像recv方法阻塞,但它爲什麼會這樣做?

+0

你是從空轉呢? – thegrinner

+0

如果每個線程都得到一個唯一的套接字,爲什麼你要做一個副本? – agf

+0

@thegrinner,否 – nobody

回答

1

可能是因爲recv正在從文件讀取並且I/O被阻塞? (套接字文件太多,你可能知道):)

看吧:python socket.recv/sendall call blocking更多的信息:)

+0

那麼,套接字是本地主機上的端口,我希望recv從那裏讀取。我如何驗證這一點? – nobody