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实现扫描指定目录下的子目录及文件的方法
Jul 16 Python
跟老齐学Python之dict()的操作方法
Sep 24 Python
Python编写百度贴吧的简单爬虫
Apr 02 Python
python实现数据库跨服务器迁移
Apr 12 Python
Python3中lambda表达式与函数式编程讲解
Jan 14 Python
Python生成rsa密钥对操作示例
Apr 26 Python
详解python tkinter模块安装过程
Jan 06 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
Python执行时间的几种计算方法
Jul 31 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 Python
C3 线性化算法与 MRO之Python中的多继承
Oct 05 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各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
Drupal简体中文语言包安装教程
2014/09/27 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
基于python历史天气采集的分析
2019/02/14 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
python用requests实现http请求代码实例
2019/10/31 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
python如何支持并发方法详解
2020/07/25 Python
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
承诺书格式范文
2014/06/03 职场文书
庆六一活动总结
2014/08/29 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
新闻人物通讯稿
2014/10/09 职场文书
佛光寺导游词
2015/02/10 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
公务员爱岗敬业心得体会
2016/01/25 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL