2014-07-10 35 views
1

我有一個線程正在運行,正在從套接字連接尋找數據。當它是空的時候,就像我發現它應該放在那裏一樣,但是當它是空的時候我想通過它。我發現選擇模塊應該能夠做到,但現在它只是坐在選擇線上。我從下面的一些研究中嘗試了這一點,但正如我所說的,現在不是停在data = sock.recv,而是停在第一行。有任何想法嗎?謝謝。繼續由sock.recv()當空python

while True: 
     readable, writable, exceptional = select.select([sock], [], []) 
     if readable: 
      data = sock.recv(1024) 
     else: 
      do something 

回答

1

正如你可以在the documentation已閱讀,select.select()帶有一個可選的第四個參數,採取超時值。

如果通過超時而沒有sock變得可讀,則readable爲空。

你可以嘗試像

while True: 
    readable, writable, exceptional = select.select([sock], [], [], 1.0) 
    if readable: 
     data = sock.recv(1024) 
    else: 
     print "nothing yet" 
+0

可讀,可寫,特殊= select.select([襪子],[],[],超時= 1.0) 類型錯誤:選擇()函數沒有關鍵字參數 - 我試過了,但是得到這個錯誤 – user3582887

+0

這意味着你不能使用關鍵字參數,只需要傳遞超時值:'可讀,可寫,異常= select.select([sock],[],[],1.0)'' 。 – SiHa

+1

@ user3582887好吧,然後我誤解了那部分文檔,但是你已經有想過嘗試'select.select([sock],[],[],1.0)',不是嗎? – glglgl