一:管道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垃圾回收