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的SimPy库简化复杂的编程模型的介绍
Apr 13 Python
Python中优化NumPy包使用性能的教程
Apr 23 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
TensorFlow实现简单卷积神经网络
May 24 Python
python 读取文件并替换字段的实例
Jul 12 Python
对python 多线程中的守护线程与join的用法详解
Feb 18 Python
详解Python的循环结构知识点
May 20 Python
24式加速你的Python(小结)
Jun 13 Python
python中的句柄操作的方法示例
Jun 20 Python
Django框架视图函数设计示例
Jul 29 Python
详解Python3 pickle模块用法
Sep 16 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 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
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
javascript innerText和innerHtml应用
2010/01/28 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
2015/02/26 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
js微信分享实现代码
2020/10/11 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
python实现的简单RPG游戏流程实例
2015/06/28 Python
全面解析Python的While循环语句的使用方法
2015/10/13 Python
Python实现的文本编辑器功能示例
2017/06/30 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Python中的取模运算方法
2018/11/10 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
Django多数据库的实现过程详解
2019/08/01 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
工作表现评语
2014/01/19 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
家长会主持词
2014/03/26 职场文书
出生证明公证书
2014/04/09 职场文书
管理建议书范文
2014/05/13 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
教师党员自我评价范文
2015/03/04 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
教师继续教育反思周记
2015/06/25 职场文书