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 相关文章推荐
微信 用脚本查看是否被微信好友删除
Oct 28 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
手把手教你如何安装Pycharm(详细图文教程)
Nov 28 Python
使用python对文件中的单词进行提取的方法示例
Dec 21 Python
详解Python中的各种转义符\n\r\t
Jul 10 Python
Python装饰器使用你可能不知道的几种姿势
Oct 25 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
解决pyCharm中 module 调用失败的问题
Feb 12 Python
Django 返回json数据的实现示例
Mar 05 Python
python 链接sqlserver 写接口实例
Mar 11 Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 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将向Java靠拢
2006/10/09 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
利用python画一颗心的方法示例
2017/01/31 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
门诊挂号室室长岗位职责
2013/11/27 职场文书
酒店端午节促销方案
2014/02/18 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
毕业论文致谢信
2015/05/14 职场文书
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers