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 相关文章推荐
Django发送html邮件的方法
May 26 Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
WxPython建立批量录入框窗口
Feb 27 Python
Python实战之制作天气查询软件
May 14 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
Windows下实现将Pascal VOC转化为TFRecords
Feb 17 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 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适配器模式(Adapter)
2014/11/25 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
2016/01/26 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
python 队列详解及实例代码
2016/10/18 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
网上开店必备创业计划书
2014/01/26 职场文书
检举信的格式及范文
2014/04/04 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
毕业生应聘求职信
2014/07/10 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
2015年食堂工作总结报告
2015/04/23 职场文书
在职证明书模板
2015/06/15 职场文书
美容院员工规章制度
2015/08/05 职场文书