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基于twisted实现简单的web服务器
Sep 29 Python
python通过正则查找微博@(at)用户的方法
Mar 13 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
May 22 Python
Python中的localtime()方法使用详解
May 22 Python
KMP算法精解及其Python版的代码示例
Jun 01 Python
Python深度优先算法生成迷宫
Jan 22 Python
详解Python正则表达式re模块
Mar 19 Python
使用python接入微信聊天机器人
Mar 31 Python
django fernet fields字段加密实践详解
Aug 12 Python
python中sort和sorted排序的实例方法
Aug 26 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 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数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
php导出生成word的方法
2015/12/25 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
Python3读取文件常用方法实例分析
2015/05/22 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
python requests 测试代理ip是否生效
2018/07/25 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
python使用 __init__初始化操作简单示例
2019/09/26 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
公积金单位接收函
2014/01/11 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
股权转让协议书
2014/12/07 职场文书
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript
搭建Yolov5服务器
2022/04/30 Servers