在Python中,select()
是一个用于多路复用的函数。它可以同时监视多个文件对象(包括套接字)的读写状态,当其中任何一个文件对象就绪(可读或可写)时,select()
函数将返回该文件对象。
select()
函数的基本语法如下:
read_list, write_list, error_list = select.select(inputs, outputs, exceptions, timeout)
参数说明:
inputs
:需要监视的可读对象的列表。outputs
:需要监视的可写对象的列表。exceptions
:需要监视的异常对象的列表。timeout
:可选参数,设置超时时间,单位为秒(默认为阻塞状态,直到有就绪的对象)。返回值说明:
read_list
:可读对象列表中就绪的对象。write_list
:可写对象列表中就绪的对象。error_list
:异常对象列表中就绪的对象。示例用法:
import select
import socket
# 创建套接字并监听
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8000))
server_socket.listen(5)
inputs = [server_socket]
while True:
# 使用select函数进行监视
readable, writable, exceptional = select.select(inputs, [], [])
for sock in readable:
if sock is server_socket:
# 有新的连接请求
client_socket, client_address = server_socket.accept()
inputs.append(client_socket)
else:
# 有数据可读
data = sock.recv(1024)
if data:
print('Received:', data.decode())
else:
# 客户端断开连接
sock.close()
inputs.remove(sock)
以上示例中,使用select()
函数来监视套接字对象的可读状态。当有新的连接请求时,将新的客户端套接字添加到inputs
列表中,当客户端发送数据时,将数据打印出来。