我可以一次听多个套接字
我目前用于监控套接字的代码是:
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
答案 0 :(得分:12)
是的,有。您需要使用非阻塞调用来从套接字接收。查看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()
传递额外的参数,这是一个超时。如果没有套接字准备就绪,这将使它永远不会阻塞。
答案 1 :(得分:0)
对entropy对于Python 3的答案进行了小幅更新:
selectors
模块允许在选择模块原语的基础上进行高层且高效的I / O复用。鼓励用户改用此模块,除非他们希望对所使用的OS级原语进行精确控制。
按照documentation