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 字典(dict)遍历的四种方法性能测试报告
Jun 25 Python
在Python中利用Pandas库处理大数据的简单介绍
Apr 07 Python
Python计算一个文件里字数的方法
Jun 15 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
Python中的浮点数原理与运算分析
Oct 12 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 Python
python使用requests.session模拟登录
Aug 09 Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
Python基于traceback模块获取异常信息
Jul 23 Python
python实现图像随机裁剪的示例代码
Dec 10 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 用sock技术发送邮件的函数
2007/07/21 PHP
PHP 命令行参数详解及应用
2011/05/18 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
Python不规范的日期字符串处理类
2014/06/10 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
python 输出上个月的月末日期实例
2018/04/11 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
keras 多gpu并行运行案例
2020/06/10 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
注塑工厂厂长岗位职责
2013/12/02 职场文书
函授药学自我鉴定
2014/02/07 职场文书
历史专业学生的自我评价
2014/02/28 职场文书
竞赛口号大全
2014/06/16 职场文书
2014党员批评和自我批评思想汇报
2014/09/21 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书