我正在運行一個從隊列中抓取消息,將其發送給客戶端並接收確認的線程。如果客戶端斷開連接,線程將捕獲套接字錯誤並終止。問題是如果msgQ爲空,則線程從不檢查套接字連接。有沒有辦法設置這個代碼,即使隊列是空的,套接字被檢查? (問題是,沒有消息,沒有什麼可以發送)Python:Queue.get()阻止檢查套接字連接的代碼
我需要發送一個特殊的乒乓球! msgQ爲空的消息(並檢查客戶端消息是日誌數據還是ping?)?任何幫助,將不勝感激。
def run(self):
while not self._terminate:
try:
msgs = self.msgQ.get()
self.sock.send(pickle.dumps(msgs))
rdy = pickle.loads(self.sock.recv(2097152))
except socket.error, EOFError:
print 'log socketmanager closing'
self.terminate()
break
except Empty: pass
self.sock.recv()是一個阻塞調用,除非你有非阻塞套接字。這意味着如果隊列中沒有消息,那麼發出一個self.sock.recv()將會阻塞並且不會繼續處理,直到收到某個消息。那是你想要做的嗎? – 2011-03-10 00:20:43