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 相关文章推荐
简单介绍Python中的JSON模块
Apr 08 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 Python
详解flask入门模板引擎
Jul 18 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
详解python数据结构和算法
Apr 18 Python
深入了解Python在HDA中的应用
Sep 05 Python
用Python解数独的方法示例
Oct 24 Python
python绘制规则网络图形实例
Dec 09 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
Python中常见的数制转换有哪些
May 27 Python
如何用用Python将地址标记在地图上
Feb 07 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
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
vue教程之toast弹框全局调用示例详解
2020/08/24 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
python 读写txt文件 json文件的实现方法
2016/10/22 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
python绘制直方图和密度图的实例
2019/07/08 Python
Python 3 判断2个字典相同
2019/08/06 Python
python实现滑雪者小游戏
2020/02/22 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
女士鞋子、包包和服装在线,第一款10美元:ShoeDazzle
2019/07/26 全球购物
SQL Server笔试题
2012/01/10 面试题
会计与审计毕业生自荐信范文
2013/12/30 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
让世界充满爱观后感
2015/06/10 职场文书
运动会运动员赞词
2015/07/22 职场文书
导游词之扬州大明寺
2019/10/09 职场文书