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


Posted in Python onJune 04, 2015

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

在Python中使用select与poll比起在C中使用简单得多。select函数的参数是3个列表,包含整数文件描述符,或者带有可返回文件描述符的fileno()方法对象。第一个参数是需要等待输入的对象,第二个指定等待输出的对象,第三个参数指定异常情况的对象。第四个参数则为设置超时时间,是一个浮点数。指定以秒为单位的超时值。select函数将会返回一组文件描述符,包括输入,输出以及异常。

在linux下利用select实现多路IO的文件复制程序:

#!/usr/bin/env python
import select
#导入select模块
BLKSIZE=8192
def readwrite(fromfd,tofd):
  readbuf = fromfd.read(BLKSIZE)
  if readbuf:
    tofd.write(readbuf)
    tofd.flush()
  return len(readbuf)
def copy2file(fromfd1,tofd1,fromfd2,tofd2):
    ''' using select to choice fds'''
  totalbytes=0
    if not (fromfd1 or fromfd2 or tofd1 or tofd2) :
 #检查所有文件描述符是否合法
        return 0
  while True:
 #开始利用select对输入所有输入的文件描述符进行监视
    rs,ws,es = select.select([fromfd1,fromfd2],[],[])
    for r in rs:
      if r is fromfd1:
 #当第一个文件描述符可读时,读入数据
        bytesread = readwrite(fromfd1,tofd1)      
        totalbytes += bytesread
      if r is fromfd2:
        bytesread = readwrite(fromfd2,tofd2)
        totalbytes += bytesread
    if (bytesread <= 0):
      break
  return totalbytes
def main():
  fromfd1 = open("/etc/fstab","r")
  fromfd2 = open("/etc/passwd","r")
  tofd1 = open("/root/fstab","w+")
  tofd2 = open("/root/passwd","w+")
  totalbytes = copy2file(fromfd1,tofd1,fromfd2,tofd2)
  print "Number of bytes copied %d\n" % totalbytes
  return 0
if __name__=="__main__":
  main()

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

Python 相关文章推荐
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
Dec 12 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
Python爬虫使用脚本登录Github并查看信息
Jul 16 Python
Python assert语句的简单使用示例
Jul 28 Python
python读写csv文件的方法
Aug 13 Python
Python搭建代理IP池实现存储IP的方法
Oct 27 Python
python json load json 数据后出现乱序的解决方案
Feb 27 Python
python如何编写win程序
Jun 08 Python
Django框架请求生命周期实现原理
Nov 13 Python
基于Python绘制子图及子图刻度的变换等的问题
May 23 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
wxPython定时器wx.Timer简单应用实例
Jun 03 #Python
You might like
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
php实现Mysql简易操作类
2015/10/11 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
python分割和拼接字符串
2013/11/01 Python
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
Python的迭代器和生成器
2015/07/29 Python
Python yield与实现方法代码分析
2018/02/06 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
python科学计算之narray对象用法
2019/11/25 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
python模拟实现斗地主发牌
2020/01/07 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
《动手做做看》教学反思
2014/04/09 职场文书
大学班级学风建设方案
2014/05/01 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript