python select函数_Python通过select实现异步IO的方法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值