Python---进程间数据交互与共享

进程间数据交互的3种方式:队列Queue,管道Pipe,Manager。

#队列实现进程间数据交互
from multiprocessing import Process,Queue

def run(q):
    q.put(["xiaohei",89,None])

if __name__=='__main__':
    Q=Queue()
    P=Process(target=run,args=(Q,))
    P.start()
    print(Q.get())
    P.join()
#Pipe实现进程间数据交互

from multiprocessing import Process,Pipe

#子进程发送接收发送,父进程接收发送接收

def S(conn):
    conn.send("Are you ok?")
    print(conn.recv())
    conn.send("I am a bit tired")
    conn.close()


if __name__=='__main__':
    father_conn,son_conn=Pipe()   #此处Pipe()产生双向管道,将管道的两端分别传给两个进程,两个进程互相收发
    p=Process(target=S,args=(son_conn,))
    p.start()
    print(father_conn.recv())
    father_conn.send("I am fine,thanks,and you?")
    print(father_conn.recv())
    p.join()
#Manager实现数据交互与共享

from multiprocessing import Process,Manager
import os

def run(d,l):
    d[os.getpid()]=os.getpid()   #os.getpid() 获得进程ID
    l.append(os.getpid())
    print(l)


if __name__=='__main__':
    with Manager() as manager:
        D=manager.dict()  #生成一个字典,可在多进程间共享和传递
        L=manager.list()  #生成一个列表,可在多进程间共享和传递
        p_obj=[]
        for i in range(10):
            p=Process(target=run,args=(D,L,))
            p.start()
            p_obj.append(p)
        for p in p_obj:
            p.join()
        print(D)
        print(L)


你可能感兴趣的:(Python高级基础)