2013-02-26 69 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