有没有办法同时监听多个Python套接字?
我可以同时监听多个套接字吗?
我现在用来监控套接字的代码是:
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。
2 个回答
15
是的,确实有办法。你需要使用非阻塞调用来接收来自套接字的数据。可以看看这个select模块
如果你要从套接字读取数据,下面是使用的方法:
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()
传一个额外的参数,这个参数是超时时间。如果没有套接字准备好,这样可以避免一直卡在那儿。