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实现的检测网站挂马程序
Nov 30 Python
Python 字典dict使用介绍
Nov 30 Python
python使用webbrowser浏览指定url的方法
Apr 04 Python
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
深入浅析python继承问题
May 29 Python
利用Python操作消息队列RabbitMQ的方法教程
Jul 19 Python
python基础教程项目四之新闻聚合
Apr 02 Python
使用celery执行Django串行异步任务的方法步骤
Jun 06 Python
python selenium循环登陆网站的实现
Nov 04 Python
windows中安装Python3.8.0的实现方法
Nov 19 Python
Python类中的装饰器在当前类中的声明与调用详解
Apr 15 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 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和ACCESS写聊天室(六)
2006/10/09 PHP
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
(function($){...})(jQuery)的意思
2010/07/22 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
python生成随机验证码(中文验证码)示例
2014/04/03 Python
python采集博客中上传的QQ截图文件
2014/07/18 Python
python通过yield实现数组全排列的方法
2015/03/18 Python
Python socket编程实例详解
2015/05/27 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
使用Python来开发微信功能
2018/06/13 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
用Python配平化学方程式的方法
2019/07/20 Python
python滑块验证码的破解实现
2019/11/10 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
Python extract及contains方法代码实例
2020/09/11 Python
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
实习老师个人总结的自我评价
2013/09/28 职场文书
村捐赠仪式答谢词
2014/01/21 职场文书
音乐剧猫观后感
2015/06/04 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS