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 相关文章推荐
sqlalchemy对象转dict的示例
Apr 22 Python
python中bisect模块用法实例
Sep 25 Python
Python中import机制详解
Nov 14 Python
python实现换位加密算法的示例
Oct 14 Python
pandas通过索引进行排序的示例
Nov 16 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
Python搭建代理IP池实现获取IP的方法
Oct 27 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
使用tensorflow进行音乐类型的分类
Aug 14 Python
Django vue前后端分离整合过程解析
Nov 20 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 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抓取页面与代码解析 推荐
2010/07/23 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
php中使用sftp教程
2015/03/30 PHP
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
python psutil库安装教程
2018/03/19 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
django中间键重定向实例方法
2019/11/10 Python
python实现最速下降法
2020/03/24 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
软件工程专业推荐信
2013/10/28 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
市场营销大学生职业规划书
2014/02/25 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
小学家长评语大全
2014/04/16 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
反邪教标语
2014/06/23 职场文书
机关党员公开承诺书
2014/08/30 职场文书
工程部文员岗位职责
2015/02/04 职场文书
治庸问责工作总结
2015/08/11 职场文书
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers