from multiprocessing import Process,Queue import time import random ''' 进程间两种方式传递数据 项目方式:生产包子和吃包子 进程的队列和线程的队列不一样 线程队列queue.Queue() --------- 进程队列multiprocessing.Queue() ''' def aoo(que): while True: #开始生产包子并放置到包子队列中 rr = random.randint(1,100) que.put(rr) print("现在生产了%s号包子"%rr) time.sleep(1) def boo(que): while True: #开始再包子队列中拿包子吃 qg = que.get() print("现在吃了%s号包子"%qg) if __name__ == "__main__": que = Queue() #创建进程队列 pros = [] for i in range(3): # 创建三个进程生产包子 pro1 = Process(target=aoo,args=(que,)) pros.append(pro1) #把que传递到函数方法中实现共享队列 pro1.start() pro2 = Process(target=boo,args=(que,)) pros.append(pro2) pro2.start() #创建一个进程吃包子 for pr in pros: #所有进程执行完后再执行 pr.join() print("-------我是主Process进程")
from multiprocessing import Pipe,Process def aoo(conn): conn.send("ddd") print(conn.recv()) if __name__ == "__main__": parent_conn,child_conn = Pipe() #创建管道便于信息互通 pro = Process(target=aoo,args=(child_conn,)) #创建进程,并将子进程传递给函数conn pro.start() print(parent_conn.recv()) parent_conn.send("jjjjj") pro.join()
Manager
from multiprocessing import Manager,Pipe,Process def aoo(dicts,lists,num): dicts[0] = 1 dicts[8]="a" lists.append(num) if __name__ == "__main__": #创建Manager 实现数据共享 manager = Manager() dicts = manager.dict() lists = manager.list() #创建三个进程 pros = [] for num in range(5): pro = Process(target=aoo,args=(dicts,lists,num)) pros.append(pro) pro.start() for ie in pros: ie.join() print(dicts) print(lists)