Python 中的多路 I/O 复用指的是同时监听多个 I/O 事件,以实现非阻塞的并发 I/O 操作。常见的多路 I/O 复用技术有 select、poll 和 epoll。
在 Python 中,常用的多路 I/O 复用模块是 select,它可以同时监测多个文件对象(包括 socket、文件等),并在其中任何一个文件对象满足条件时进行处理。下面是一个简单的示例,演示了如何使用 select 模块进行多路 I/O 复用:
python import select import socket
创建服务器套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 8080)) server_socket.listen(5)
创建文件对象列表
inputs = [server_socket]
while True: # 多路复用监测 ready_to_read, _, _ = select.select(inputs, [], [])
# 处理就绪的文件对象
for ready_file in ready_to_read:
if ready_file == server_socket:
# 接受客户端连接
client_socket, address = server_socket.accept()
inputs.append(client_socket)
print(f"客户端 {address} 已连接")
else:
# 接收客户端消息
data = ready_file.recv(1024)
if not data:
# 客户端断开连接
inputs.remove(ready_file)
ready_file.close()
continue
# 回复客户端消息
ready_file.sendall(data)
在上述示例中,我们使用 select.select 方法来进行多路 I/O 复用,将服务器套接字添加到文件对象列表中并监听。当有客户端连接时,会将其套接字添加到文件对象列表中;当有客户端发送消息时,会接收消息并回复。通过多路 I/O 复用,可以实现高效的并发处理,提高程序的性能和并发处理能力。
需要注意的是,在使用多路 I/O 复用时,需要特别处理共享资源的并发访问问题,以及适当处理异常和错误,以确保程序的稳定性和可靠性。