python写一个多路复用
时间: 2024-10-24 22:04:48 浏览: 17
在Python中,多路复用通常指的是使用异步I/O或多线程技术来同时处理多个网络连接或文件句柄,提高程序的并发性能。这里我们以socket库为例,展示如何实现基于select模块的基本多路复用:
```python
import socket
import select
# 创建套接字列表
sockets_list = [socket.socket(socket.AF_INET, socket.SOCK_STREAM) for _ in range(3)] # 假设我们要监听3个端口
# 绑定并监听端口
for sock in sockets_list:
sock.bind(('localhost', 0))
sock.listen()
# 创建selector对象
selector = select.Selector()
# 注册套接字到selector
for sock in sockets_list:
selector.register(sock, select.EVENT_READ)
while True:
events = selector.select() # 等待事件发生
for key, mask in events:
sock = key.fileobj
if mask & select.EVENT_READ: # 如果有读事件
connection, addr = sock.accept() # 接受新连接
print(f"Accepted connection from {addr}")
selector.unregister(sock)
new_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
new_sock.connect(addr) # 连接到客户端
sockets_list.append(new_sock)
selector.register(new_sock, select.EVENT_READ) # 重新注册新连接
# 关闭所有套接字
for sock in sockets_list:
sock.close()
```
在这个例子中,`selector.select()`会阻塞直到有任何套接字准备好接收数据或可以发送数据。当这种情况发生时,我们可以检查并相应地处理每个连接。
阅读全文