Python通过poll实现异步IO的方法


Posted in Python onJune 04, 2015

本文实例讲述了Python通过poll实现异步IO的方法。分享给大家供大家参考。具体分析如下:

在使用poll()后返回轮询对象,该对象支持以下方法:
pollObj.register(fd,[,eventmask])第一个参数是注册新的文件描述符fd,fd要么是一个整数文件描述符,要么可以带有一个获取文件描述符的fileno()方法的对象。eventmask是一些按位或标记,这些标记指示要处理的事件。

POLLIN:       用于读取数据
POLLPRI:      用于读取紧急数据
POLLOUT:      准备写入
POLLERR:      错误情况
POLLHUP:      保持状态
POLLNVAL:     无效请求

最后在循环中利用pollObj.poll()来进行对已注册的文件描述符进行轮询。返回一元祖(fd,event)。其中fd是文件描述符,event是指示时间的位掩码。至需要将event与对应的时间进行&测试即可。

利用poll创建对一个多路文件复制程序,代码如下:

#!/usr/bin/env python
import select
BLKSIZE=8192
def readwrite(fromfd,tofd):
  readbuf = fromfd.read(BLKSIZE)
  if readbuf:
    tofd.write(readbuf)
    tofd.flush()
  return len(readbuf)
def copyPoll(fromfd1,tofd1,fromfd2,tofd2):
  #定义需要监听的事件
  READ_ONLY = (select.POLLIN |
       select.POLLPRI |
      select.POLLHUP |
      select.POLLERR )
  totalbytes=0
    if not (fromfd1 or fromfd2 or tofd1 or tofd2) :
    return 0
  fd_dict = {fromfd1.fileno():fromfd1,fromfd2.fileno():fromfd2}
  #创建poll对象p
  p=select.poll()
  #利用poll对象p对需要监视的文件描述符进行注册
  p.register(fromfd1,READ_ONLY)
  p.register(fromfd2,READ_ONLY)
  while True:
  #轮询已经注册的文件描述符是否已经准备好
    result = p.poll()
    if len(result) != 0:
      for fd,events in result:
        if fd_dict[fd] is fromfd1:
          if events & (select.POLLIN|select.POLLPRI):
            bytesread = readwrite(fromfd1,tofd1)
            totalbytes+=bytesread
          elif events & (select.POLLERR):
            p.unregister(fd_dict[fd])
        if fd_dict[fd] is fromfd2:
          if events & (select.POLLIN|select.POLLPRI):
            bytesread = readwrite(fromfd2,tofd2)
            totalbytes+=bytesread
          elif events & (select.POLLERR):
            p.unregister(fd_dict[fd])
    if bytesread <= 0:  
      break
  return totalbytes
def main():
  fromfd1 = open("/etc/fstab","r")
  fromfd2 = open("/root/VMwareTools-8.8.1-528969.tar.gz","r")
  tofd1 = open("/root/fstab","w+")
  tofd2 = open("/var/passwd","w+")
  totalbytes = copyPoll(fromfd1,tofd1,fromfd2,tofd2)
  print "Number of bytes copied %d\n" % totalbytes
  return 0
if __name__=="__main__":
  main()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python中字典(Dictionary)用法实例详解
May 30 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
Python使用sftp实现上传和下载功能(实例代码)
Mar 14 Python
Python实现对字符串的加密解密方法示例
Apr 29 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
django 自定义过滤器的实现
Feb 26 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
Python 中@property的用法详解
Jan 15 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
Jul 31 Python
如何用用Python将地址标记在地图上
Feb 07 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 Python
Python通过select实现异步IO的方法
Jun 04 #Python
Python守护进程用法实例分析
Jun 04 #Python
Python使用multiprocessing创建进程的方法
Jun 04 #Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 #Python
python实现支持目录FTP上传下载文件的方法
Jun 03 #Python
python实现的DES加密算法和3DES加密算法实例
Jun 03 #Python
python获取各操作系统硬件信息的方法
Jun 03 #Python
You might like
php简单实现发送带附件的邮件
2015/06/10 PHP
详解php命令注入攻击
2019/04/06 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
javascript中的面向对象
2017/03/30 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
python中Genarator函数用法分析
2015/04/08 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
python与pycharm有何区别
2020/07/01 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
传播学专业毕业生自荐信
2013/11/04 职场文书
高中毕业自我鉴定
2013/12/13 职场文书
护士检查书
2014/01/17 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
开网店计划分析
2019/07/30 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫