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备份文件的脚本
Aug 11 Python
python 多线程应用介绍
Dec 19 Python
python k-近邻算法实例分享
Jun 11 Python
在Python中操作文件之seek()方法的使用教程
May 24 Python
Python3学习urllib的使用方法示例
Nov 29 Python
python查询mysql,返回json的实例
Mar 26 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
10个Python小技巧你值得拥有
Sep 29 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
Django ModelForm组件使用方法详解
Jul 23 Python
Window10下python3.7 安装与卸载教程图解
Sep 30 Python
python pandas利用fillna方法实现部分自动填充功能
Mar 16 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使用者状态管理功能的应用
2006/10/09 PHP
用PHP和ACCESS写聊天室(四)
2006/10/09 PHP
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
PHP fopen函数用法实例讲解
2019/02/15 PHP
二级域名转向类
2006/11/09 Javascript
理解 JavaScript 预解析
2009/10/25 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python中的sort方法使用详解
2014/07/25 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
Python命令行解析模块详解
2018/02/01 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
python计算无向图节点度的实例代码
2019/11/22 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
大学生毕业求职的自我评价
2013/09/29 职场文书
土木工程毕业生自荐信
2013/11/12 职场文书
简短大学毕业感言
2014/01/18 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书