1. 程式人生 > >進程間的通信

進程間的通信

共享內存 pre start 通信 code rgs clas lee 進程

進程間的通信方式有 管道,消息隊列 ,共享內存,信號(不太會),套接字(用於web)

管道方式:一個放入一個取出

def ps(c,msg):
    print("child start")
    c.send("hello"+str(msg))
    print(os.getpid())
if __name__=="__main__":
    c,pa=Pipe()
    li=[]
    for i in range(5):
        p=Process(target=ps,args=(c,""))
        li.append(p)
        p.start()
    
for i in range(5): data=pa.recv() print(data) for i in range(5): p.join()

消息隊列:先放入消息再取出消息

def ps(c,msg):
    c.put("hello"+str(msg))
if __name__=="__main__":
    q=Queue()
    l=[]
    for i in range(5):
        p=Process(target=ps,args=(q,"_--"))
        l.append(p)
        p.start()
    
for i in l: i.join() while not q.empty(): print(q.get())

共享內存:

def ps(msg):
    for i in range(5):
        if msg.value==100:
            msg.value=0
        else:
            msg.value=100
        print(msg.value)
        sleep(1)
if __name__=="__main__":
    msg=Value("i",100)
    p1
=Process(target=one,args=(msg,)) p2=Process(target=one,args=(msg,)) p1.start() p2.start() p1.join() p2.join()

進程間的通信