有没有办法一次监听多个python套接字

Cal*_*lum 9 python sockets

我可以一次听多个插座吗?

我目前用于监控套接字的代码是:

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

但那等待在线:

data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
Run Code Online (Sandbox Code Playgroud)

直到它收到一条消息.

有没有办法让它一次听到多个套接字

编辑:不确定它是否完全相关,但我正在使用UDP

ent*_*opy 12

就在这里.您需要使用非阻塞调用来从套接字接收.查看选择模块

如果您正在阅读插座,请使用以下方法:

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
Run Code Online (Sandbox Code Playgroud)

注意:您还可以传递select.select()一个超时的额外参数.如果没有套接字准备好,这将使它永远不会被阻塞.