Python中select用法
时间: 2023-07-16 16:17:10 浏览: 134
`select`是Python中的一个用于I/O多路复用的系统调用,用于监视多个文件描述符的状态,当其中任意一个文件描述符发生变化时,就会通知程序进行相应的处理。
`select`的基本用法如下:
```python
import select
readable, writable, exceptional = select.select(inputs, outputs, inputs, timeout)
```
其中,`inputs`是希望监视读取事件的文件描述符列表(可以是socket、管道、标准输入等),`outputs`是希望监视写入事件的文件描述符列表(可以是socket、管道等),`timeout`是超时时间(单位是秒,可以为`None`表示永久等待)。`select`会返回三个列表,分别是可读、可写、异常事件产生的文件描述符列表。
例如,我们可以使用`select`实现一个简单的回显服务器:
```python
import socket
import select
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 12345))
server.listen(5)
inputs = [server]
outputs = []
while True:
readable, writable, exceptional = select.select(inputs, outputs, inputs, None)
for r in readable:
if r is server:
conn, addr = server.accept()
inputs.append(conn)
conn.send(b'Welcome to my echo server!\n')
else:
data = r.recv(1024)
if data:
r.send(data)
else:
inputs.remove(r)
r.close()
```
这个回显服务器会监听`localhost`的`12345`端口,当有客户端连接时,会给客户端发送欢迎信息。当客户端发送数据时,服务器会回显该数据给客户端。如果客户端关闭连接,则服务器会从输入列表中移除该连接。
阅读全文