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文件右键找不到IDLE打开项解决办法
Jun 08 Python
python魔法方法-自定义序列详解
Jul 21 Python
python 异常处理总结
Oct 18 Python
小米5s微信跳一跳小程序python源码
Jan 08 Python
对python读取CT医学图像的实例详解
Jan 24 Python
Python3 Tkinter选择路径功能的实现方法
Jun 14 Python
PyTorch中Tensor的拼接与拆分的实现
Aug 18 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 Python
详解Python为什么不用设计模式
Jun 24 Python
一篇文章带你了解Python和Java的正则表达式对比
Sep 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
一个分页的论坛
2006/10/09 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
分享PHP header函数使用教程
2013/09/05 PHP
PHP类的反射用法实例
2014/11/03 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
Python实现Linux下守护进程的编写方法
2014/08/22 Python
Python中logging模块的用法实例
2014/09/29 Python
python中使用mysql数据库详细介绍
2015/03/27 Python
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
策划总监岗位职责
2014/02/16 职场文书
绘画专业自荐信
2014/07/04 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
关于远足的感想
2015/08/10 职场文书
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript