位置: 编程技术 - 正文

深入理解python中的select模块(深入浅出python)

编辑:rootadmin

推荐整理分享深入理解python中的select模块(深入浅出python),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:如何理解python语言,怎么理解python,深入理解python特性pdf百度云,如何理解python语言,如何理解python语言,python的理解,python深入浅出,深入理解python特性 pdf,内容如对您有帮助,希望把文章链接给更多的朋友!

简介

Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue方法(freeBSD系统)

select方法

进程指定内核监听哪些文件描述符(最多监听个fd)的哪些事件,当没有文件描述符事件发生时,进程被阻塞;当一个或者多个文件描述符事件发生时,进程被唤醒。

当我们调用select()时:

  1、上下文切换转换为内核态

  2、将fd从用户空间复制到内核空间

  3、内核遍历所有fd,查看其对应事件是否发生

  4、如果没发生,将进程阻塞,当设备驱动产生中断或者timeout时间后,将进程唤醒,再次进行遍历

  5、返回遍历后的fd

  6、将fd从内核空间复制到用户空间

fd:file descriptor 文件描述符

参数: 可接受四个参数(前三个必须)

rlist: wait until ready for reading wlist: wait until ready for writing xlist: wait for an “exceptional condition” timeout: 超时时间

返回值:三个列表

select方法用来监视文件描述符(当文件描述符条件不满足时,select会阻塞),当某个文件描述符状态改变后,会返回三个列表

1、当参数1 序列中的fd满足“可读”条件时,则获取发生变化的fd并添加到fd_r_list中

2、当参数2 序列中含有fd时,则将该序列中所有的fd添加到 fd_w_list中

深入理解python中的select模块(深入浅出python)

3、当参数3 序列中的fd发生错误时,则将该发生错误的fd添加到 fd_e_list中

4、当超时时间为空,则select会一直阻塞,直到监听的句柄发生变化

当超时时间 = n(正整数)时,那么如果监听的句柄均无任何变化,则select会阻塞n秒,之后返回三个空列表,如果监听的句柄有变化,则直接执行。

实例:利用select实现一个可并发的服务端

在服务端我们可以看到,我们需要不停的调用select, 这就意味着:

  1 当文件描述符过多时,文件描述符在用户空间与内核空间进行copy会很费时

  2 当文件描述符过多时,内核对文件描述符的遍历也很浪费时间

  3 select最大仅仅支持个文件描述符

poll与select相差不大,本文不作介绍

epoll方法:

epoll很好的改进了select:

  1、epoll的解决方案在epoll_ctl函数中。每次注册新的事件到epoll句柄中时,会把所有的fd拷贝进内核,而不是在epoll_wait的时候重复拷贝。epoll保证了每个fd在整个过程中只会拷贝一次。

  2、epoll会在epoll_ctl时把指定的fd遍历一遍(这一遍必不可少)并为每个fd指定一个回调函数,当设备就绪,唤醒等待队列上的等待者时,就会调用这个回调函数,而这个回调函数会把就绪的fd加入一个就绪链表。epoll_wait的工作实际上就是在这个就绪链表中查看有没有就绪的fd

  3、epoll对文件描述符没有额外限制

事件:

水平触发和边缘触发:

Level_triggered(水平触发,有时也称条件触发):当被监控的文件描述符上有可读写事件发生时,epoll.poll()会通知处理程序去读写。如果这次没有把数据一次性全部读写完(如读写缓冲区太小),那么下次调用 epoll.poll()时,它还会通知你在上没读写完的文件描述符上继续读写,当然如果你一直不去读写,它会一直通知你!!!如果系统中有大量你不需要读写的就绪文件描述符,而它们每次都会返回,这样会大大降低处理程序检索自己关心的就绪文件描述符的效率!!! 优点很明显:稳定可靠

Edge_triggered(边缘触发,有时也称状态触发):当被监控的文件描述符上有可读写事件发生时,epoll.poll()会通知处理程序去读写。如果这次没有把数据全部读写完(如读写缓冲区太小),那么下次调用epoll.poll()时,它不会通知你,也就是它只会通知你一次,直到该文件描述符上出现第二次可读写事件才会通知你!!!这种模式比水平触发效率高,系统不会充斥大量你不关心的就绪文件描述符!!!缺点:某些条件下不可靠

epoll实例:

总结

标签: 深入浅出python

本文链接地址:https://www.jiuchutong.com/biancheng/375546.html 转载请保留说明!

上一篇:Python3如何解决字符编码问题详解(python3m)

下一篇:批量获取及验证HTTP代理的Python脚本(批量数据验证)

  • 堤防是啥
  • 珠宝饰品在什么地方买
  • 经济补偿影响下份工作吗
  • 销售二手车需要什么资质
  • 股权转让所得如何申报个税
  • 管理费里面可以取现金吗
  • 公司员工提成怎么交个税
  • 开发票利润
  • 购买原材料记账凭证怎么写
  • 企业所得税可以税前扣除的税有哪些
  • 物流商品采购价差如何做账
  • 加盖发票专用章的是
  • 出纳人员应该怎么称呼
  • 财务公司承兑汇票是商票还是银票
  • 固定资产清理在财务报表哪里体现
  • 物业公司代收代付水电费会计分录
  • 房地产经纪公司经营范围
  • 工程设计企业符合增值税抵减政策吗
  • 设备租赁费发票
  • 税务小规模定律是什么意思
  • 销项税额转出税额怎么做账?
  • 开具红字增值税专用发票是什么意思
  • 未按规定订立无固定期限劳动合同
  • 年终奖的税收筹措是什么
  • 外贸企业出口退税账务处理
  • 制造业销售费用率多少合适
  • 电子申报是什么
  • 户外广告经营总额
  • 去税局代开开专用发票需要带什么证件?
  • 产品检测步骤
  • 如何玩转win11
  • 纳税人识别号和税号一样吗
  • 未开票收入缴纳增值税怎么冲减补开发票
  • Remoterm.exe - Remoterm是什么进程 有什么用
  • pqtray.exe - pqtray 是什么进程 有什么用
  • 收到保险公司的车赔款会计分录怎么写
  • 委托贷款会计科目有哪些
  • 谈谈cookie的弊端
  • 蒙特雷景点
  • php作品
  • 出口退税税率差
  • 公司的车的停车费谁出
  • phpcms 标签
  • 材料可变现净值为什么不减去材料的销售费用
  • mysql insert语句操作实例讲解
  • 以经营房产投资合营收固定收益如何开发票?
  • 冲销以前月份的凭证
  • 电子监控系统安装与维修
  • 什么是债券转让价格与发行价格
  • 股票增发给谁
  • 小企业应该如何发展
  • linux三个主要部分及功能
  • 安装完xp系统直接蓝屏怎么办
  • ubuntu系统虚拟机安装教程
  • centos安装软件教程
  • freebsd9.3安装教程
  • u盘装系统win8
  • 平板电脑中的电池工作时是将什么能转化成了电能
  • win7声卡怎么升级
  • win10周年更新版是什么意思
  • asmb进程
  • backupnotify.exe是什么文件的进程 backupnotify进程安全吗
  • winio在win7下使用
  • win7旗舰版显示器亮度调节
  • xpspeak导入数据总是error reading
  • Win10系统如何打开任务管理器
  • win10如何打开ie8
  • win10预览版桌面图标和任务栏不翼而飞怎么办?
  • windows10预览
  • python计算两个数的最大公约数
  • javascript基础笔记
  • 用户允许控制
  • linux 中的atq命令
  • nodejs详解
  • php守护进程的应用场景
  • 税务审理工作总结
  • 内蒙古国税局官网
  • 消费税征税环节
  • 无锡国税局电话咨询热线
  • 中国税务报客户端
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设