一:管道spa
使用:from multiprocessing import Process,Pipe對象
知識:進程
1 建立管道時候:Pipe()默認是雙工的,如改爲False,那麼conn1只能接收,conn2只能發送。ip
conn1,conn2=Pipe()
2 Pipe模塊發送字符串不用bytes類型,直接是字符串類型。字符串
Pipe([duplex]):在進程之間建立一條管道,並返回元組(conn1,conn2),其中conn1, conn2表示管道兩端的鏈接對象,強調一點:必須在產生Process對象以前產生管道. #參數介紹: dumplex:默認管道是全雙工的,若是將duplex設置成False,conn1只能用於接收,conn2只能用於發送。 #主要方法: conn1.recv():接收conn2.send(obj)發送的對象。若是沒有消息可接收,recv方法會一直阻塞。 若是鏈接的另一端已經關閉,那麼recv方法會拋出EOFError。 conn1.send(obj):經過鏈接發送對象。obj是與序列化兼容的任意對象 #其餘方法: conn1.close():關閉鏈接。若是conn1被垃圾回收,將自動調用此方法 conn1.fileno():返回鏈接使用的整數文件描述符 conn1.poll([timeout]):若是鏈接上的數據可用,返回True。timeout指定等待的最長時限。 若是省略此參數,方法將當即返回結果。若是將timeout射成None,操做將無限期地等待數據到達。
進程之間一個接收信息,一個發送消息get
# from multiprocessing import Process,Pipe # def func(conn): # conn.send('hello') # conn.close() # if __name__=='__main__':#判斷是不是當前文件的文件名,若是是執行下面 # conn1,conn2=Pipe() # p=Process(target=func,args=(conn1,)) # p.start() # print(conn2.recv()) # # conn2.close() 注意 這個不寫,我是寫的錯誤的,這行去掉 # p.join()
打印結果:一個helloimport
若是是進程之間接收多條消息的時候,不是一條,須要傳遞多個對象(形參是兩個),執行一個時候,另外一個關閉。file
from multiprocessing import Process,Pipe def func(conn1,conn2): conn2.close() while True: try: msg=conn1.recv() print(msg) except EOFError: conn1.close() break if __name__=='__main__': conn1,conn2=Pipe() Process(target=func,args=(conn1,conn2)).start() conn1.close() for i in range(20): conn2.send('hello') conn2.close()
打印結果:20個hello垃圾回收