2013-02-26 25 views
5

我可以聽多個插座一次有沒有聽多蟒蛇插座一次

的代碼我使用監控此刻插座的方式是:

while True: 
    for sock in socks: 
     data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes 
     print "received message:", data 

但等待在線:

data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes 

直到它收到一條消息。

有沒有辦法讓它偵聽多個插座一次

編輯:如果不知道它是完全相關,但我使用UDP

回答

9

是的,有。您需要使用非阻塞呼叫才能從套接字接收。退房select module

如果從這裏的插座讀書是你如何使用它:

while True: 
    # this will block until at least one socket is ready 
    ready_socks,_,_ = select.select(socks, [], []) 
    for sock in ready_socks: 
     data, addr = sock.recvfrom(1024) # This is will not block 
     print "received message:", data 

注意:您還可以通過一個額外的參數select.select()這是一個超時。如果沒有套接字準備好,這將阻止它永遠阻塞。

+0

非常感謝,完美的工作,[這個例子](http://www.ibm.com/developerworks/linux/tutorials/l-pysocks/section4.html)也非常有幫助 – Calum 2013-02-26 23:43:03

+0

很高興幫助過:) – entropy 2013-02-26 23:46:08