python IO多路复用

python中IO多路复用总结

IO多路复用中包括 select、pool、epoll,这些都是阻塞IO

1. select

  1. 功能:
    • 监控(关注)多个IO,
    • 如果某个IO处于就绪状态
    • 则立即返回、通知应用程序
  2. 实现
rlist = [fd,]  #关注读事件IO列表 
wlist = [fd,]  #关注写事件IO列表
xlist = [fd,]  #关注异常事件IO列表
timeout	#超时事件,可选
rs,ws,xs=select(rlist,wlist,xlist[,timeout])	#阻塞等待事件发生,一般用循环来处理多个事件
print("监控到有IO事件发生")
#遍历rs,ws,xs ,处理事件

2. poll

  1. poll和select原理一样,监控多个IO的状态,并返回给应用程序
  2. 实现
    事件:[eventmask]
    POLLIN 表示IO的读事件
    POLLOUT 表示IO的写事件
    POLLERR 表示IO的异常事件
    POLLHUP 表示IO被断开
    POLLNVAL 无效请求
p = poll()  # 创建poll对象
p.register(fd, [eventmask]) # 关注io
unregister(fd)		#取消关注
events = p.poll() #阻塞,等待IO事件,一般用循环来处理多个事件
#events:文件描述符,就绪事件,遍历处理事件

3. epoll

  1. 是poll的改进版,针对数量较多的IO情况
    性能更好
  2. 在获取事件时候,不需要遍历所有被监控的IO
    只需遍历产生了事件被唤醒的那部分
  3. 提供了更丰富的触发机制
    1. 水平触发:当IO上有事件的时候,epoll会发出事件通知,如果IO上没有进行操作下次调用epoll时候还会进行通知
    2. 边缘触发:当IO上有事件发生时,只通知一次就算是IO事件没有被处理,直到再次出现事件的时候才通知
  4. 使用:poll对象的函数改成epoll即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值