您可能想要类似的东西
select.select()(请参阅文档)。您提供
select()了三个套接字列表:您要监视其可读性,可写性和错误状态的套接字。当新的客户端正在等待时,服务器套接字将是可读的。
该
select()功能将一直阻塞,直到套接字状态之一改变为止。
timeout如果您不想永远阻塞,可以指定第四个可选参数。
这是一个哑响应服务器示例:
import selectimport socketserver_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)server_socket.bind(('', 8888))server_socket.listen(5)print "Listening on port 8888"read_list = [server_socket]while True: readable, writable, errored = select.select(read_list, [], []) for s in readable: if s is server_socket: client_socket, address = server_socket.accept() read_list.append(client_socket) print "Connection from", address else: data = s.recv(1024) if data: s.send(data) else: s.close() read_list.remove(s)Python同时使用
epoll,
poll以及
kqueue用于支持它们的平台上实现。它们是的更有效版本
select。



