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 相关文章推荐
仅用500行Python代码实现一个英文解析器的教程
Apr 02 Python
Python实现的字典值比较功能示例
Jan 08 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
python opencv判断图像是否为空的实例
Jan 26 Python
详解Python静态网页爬取获取高清壁纸
Apr 23 Python
Python中zip()函数的简单用法举例
Sep 02 Python
Python concurrent.futures模块使用实例
Dec 24 Python
详解python tkinter模块安装过程
Jan 06 Python
Python datetime 如何处理时区信息
Sep 02 Python
Python如何使用ElementTree解析xml
Oct 12 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
2011/10/13 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
python中二维阵列的变换实例
2014/10/09 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
文化活动实施方案
2014/03/28 职场文书
学校评语大全
2014/05/06 职场文书
小学生母亲节演讲稿
2014/05/07 职场文书
活动宣传策划方案
2014/05/23 职场文书
教室布置标语
2014/06/26 职场文书
反腐倡廉警示教育活动心得体会
2014/09/04 职场文书
倡议书作文
2015/01/19 职场文书
应届生简历自我评价
2015/03/11 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
初中政教处工作总结
2015/08/12 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书