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 相关文章推荐
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
python 打印对象的所有属性值的方法
Sep 11 Python
python使用mysql的两种使用方式
Mar 07 Python
Django中使用Celery的教程详解
Aug 24 Python
pycharm 在windows上编辑代码用linux执行配置的方法
Oct 27 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
Django 路由控制的实现
Jul 17 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
python 错误处理 assert详解
Apr 20 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
python pillow库的基础使用教程
Jan 13 Python
详解Python 中的 defaultdict 数据类型
Feb 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
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
php实现头像上传预览功能
2017/04/27 PHP
php 猴子摘桃的算法
2017/06/20 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
ant design实现圈选功能
2019/12/17 Javascript
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
python学习入门细节知识点
2018/03/29 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
德购商城:德国进口直邮商城
2017/06/13 全球购物
财务信息服务专业自荐书范文
2014/02/08 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
大学生就业求职信
2014/06/12 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
2015年小学开学寄语
2015/02/27 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
初中政治教学反思
2016/02/23 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
python 学习GCN图卷积神经网络
2022/05/11 Python
PHP RabbitMQ消息列队
2022/05/11 PHP
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技