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设计模式之中介模式简单示例
Jan 09 Python
python实现用户管理系统
Jan 10 Python
Python抽象和自定义类定义与用法示例
Aug 23 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
python 获取微信好友列表的方法(微信web)
Feb 21 Python
一篇文章弄懂Python中所有数组数据类型
Jun 23 Python
简单了解Python读取大文件代码实例
Dec 18 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
Jan 08 Python
python绘制动态曲线教程
Feb 24 Python
python的pip有什么用
Jun 17 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 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+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
Python生成pdf文件的方法
2014/08/04 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
施工班组长岗位职责
2014/01/05 职场文书
应聘会计求职信
2014/06/11 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
在职证明格式样本
2015/06/15 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
MySQL快速插入一亿测试数据
2021/06/23 MySQL