本文實例講述了Python通過select實現異步IO的方法。分享給大家供大家參考。具體如下:
在Python中使用select與poll比起在C中使用簡單得多。select函數的參數是3個列表,包含整數文件描述符,或者帶有可返回文件描述符的fileno()方法對象。第一個參數是需要等待輸入的對象,第二個指定等待輸出的對象,第三個參數指定異常情況的對象。第四個參數則為設置超時時間,是一個浮點數。指定以秒為單位的超時值。select函數將會返回一組文件描述符,包括輸入,輸出以及異常。
在linux下利用select實現多路IO的文件復制程序:
#!/usr/bin/env pythonimport select#導入select模塊BLKSIZE=8192def 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 totalbytesdef 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 0if __name__=="__main__":  main()希望本文所述對大家的Python程序設計有所幫助。
新聞熱點
疑難解答