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即可
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章