Python通過select實現(xiàn)異步IO的方法
本文實例講述了Python通過select實現(xiàn)異步IO的方法。分享給大家供大家參考。具體如下:
在Python中使用select與poll比起在C中使用簡單得多。select函數(shù)的參數(shù)是3個列表,包含整數(shù)文件描述符,或者帶有可返回文件描述符的fileno()方法對象。第一個參數(shù)是需要等待輸入的對象,第二個指定等待輸出的對象,第三個參數(shù)指定異常情況的對象。第四個參數(shù)則為設置超時時間,是一個浮點數(shù)。指定以秒為單位的超時值。select函數(shù)將會返回一組文件描述符,包括輸入,輸出以及異常。
在linux下利用select實現(xiàn)多路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對輸入所有輸入的文件描述符進行監(jiān)視 rs,ws,es = select.select([fromfd1,fromfd2],[],[]) for r in rs: if r is fromfd1: #當?shù)谝粋€文件描述符可讀時,讀入數(shù)據(jù) 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+OpenCV進行卡類型及16位卡號數(shù)字的OCR功能
本文將使用Python+OpenCV實現(xiàn)模板匹配算法,以自動識別卡的類型和以及16位卡號數(shù)字,通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2021-08-08