本文实例讲述了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程序设计有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

python 管道 异步读取 select_Python通过select实现异步IO的方法相关推荐

  1. Python 数据存储读取,6千字搞定各种方法

    作者 | 老表 来源 | 简说Python 一.前言 二.专栏概要 三.做准备:将爬取到的数据存入csv和mysql.其他数据库 3.1 前情回顾 3.1 数据存入+读取csv 3.2 数据存入+读取 ...

  2. python 管道 异步读取 select_python之异步select解析

    一.I/O多路复用 I/O的含义:在计算机领域常说的IO包括磁盘IO和网络IO,我们所说的IO复用主要是指网络IO:在Linux中一切皆文件,因此网络IO也经常用文件描述符FD来表示. 复用的含义:在 ...

  3. python 读取文件到字典读取顺序_python顺序的读取文件夹下名称有序的文件方法...

    python顺序的读取文件夹下名称有序的文件方法 如下所示: import os path="/home/test/" #待读取的文件夹 path_list=os.listdir( ...

  4. 已解决Python pandas.read_excel读取Excel文件报错

    已解决(Python pandas.read_excel读取Excel文件报错)io = ExcelFile(io,storage_options=storage.options, engine=en ...

  5. python 管道队列_20.2、python进程间通信——队列和管道

    进程间通信--队列和管道(multiprocess.Queue.multiprocess.Pipe) 进程间通信 IPC(Inter-Process Communication) 队列 概念介绍 创建 ...

  6. C# 异步读取数据库里面的数据与绑定UI的解决办法

    异步读取数据库,在数据绑定的时候会出现点问题,就是窗体界面会无法关闭,要结束任务才能结束进程.例如下面代码 首先按习惯的方法,设定线程更新UI a2.CheckForIllegalCrossThrea ...

  7. mysql回调地狱_5、Express异步读取Mysql数据库 callback/promise/async

    一.Node异步 Node.js 异步编程的直接体现就是回调. 有了异步方法,我们可以一边操作数据库,一边执行其他命令,在数据库操作完成后,我们将查询数据作为回调函数的参数返回.这样在执行代码时就没有 ...

  8. python读取data_转载 “ 理想国@Data ”重拾Python(5):数据读取 博客

    本文主要对Python如何读取数据进行总结梳理,涵盖从文本文件,尤其是excel文件(用于离线数据探索分析),以及结构化数据库(以Mysql为例)中读取数据等内容. 约定: import numpy ...

  9. [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子

    [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子 $ cat customers.txt 1 Ali us 2 Bsb ca 3 Carls mx $ hive ...

最新文章

  1. c++中的public,protected,private
  2. C#中使用Monitor类、Lock和Mutex类来同步多线程的执行(转)
  3. 20分钟教你搞懂Git!
  4. 机器视觉 · 工业相机
  5. python绘制好几个子图_python绘制多个子图的实例
  6. ssl初一组周六模拟赛【2018.3.24】
  7. 【OFDM系列2】OFDM复信号符号信噪比EsN0、比特信噪比EbN0、SNR的含义及关系详解
  8. linux安装程序过程,linux 应用程序安装过程
  9. python利用有道词典翻译_使用Python从有道词典网页获取单词翻译
  10. 做产品经理的第1年、第5年和第10年...
  11. 第1次在Flash Builder中写程序
  12. 最大堆和最小堆和平衡二叉树_最小堆二叉树
  13. ubuntu升级tensorflow版本
  14. java对象中方法的存储原理_垃圾收集机制的基本原理及方法
  15. matlab统计像元灰度值的函数,matlab像素值及统计
  16. “熵减”之下,欧瑞博填补全屋智能国产操作系统空白
  17. 都9012年了还没用过typescript?
  18. Windows蓝屏之后,DUMP分析教程
  19. ReactNative实现仿微信或者通讯录快速索引功能
  20. 服务器cadence比虚拟机慢,Cadence版本选择浅见

热门文章

  1. Jconsole远程监控tomcat 的JVM内存(linux、windows)
  2. 活动目录迁移之03奔向08 --10月18日2008系列讲座预告篇
  3. CAD图纸文件中标注的尺寸如何进行隐藏?
  4. 特征工程(二) :文本数据的展开、过滤和分块
  5. [算法]华为笔试题——拼音与英文转换
  6. 《JavaScript启示录》——1.21 JavaScript对象和Object()对象
  7. storm自定义分组与Hbase预分区结合节省内存消耗
  8. [论文笔记] A model for correlated failures in N-version programming(IIE Trans, 2004)
  9. lisp天正图元位置修改_块内图元的坐标定位[已解决]感谢版主
  10. python下载不下来_Python不能下载zip文件,而Browser/Selenium可以下载,这是为什么?...