一、创建进程的两种方式
1 #方式一:直接创建 2 from multiprocessing import Process 3 import time 4 def f(name): 5 time.sleep(1) 6 print('hello',name,time.ctime()) 7 8 if __name__ == '__main__': 9 p_list = [] 10 for i in range(3): 11 p = Process(target=f,args=('alex',)) #创建子进程 12 p_list.append(p) 13 p.start() #启动子进程 14 for p in p_list: 15 p.join() 16 print('end') 17 18 '''方式2:通过类创建''' 19 from multiprocessing import Process 20 import time 21 class MyProcess(Process): 22 def __init__(self): 23 super(MyProcess, self).__init__() 24 def run(self): 25 time.sleep(1) 26 print('hello',self.name,time.ctime()) 27 if __name__ == '__main__': 28 p_list = [] 29 for i in range(3): 30 p = MyProcess() 31 p_list.append(p) 32 p.start() 33 for p in p_list: 34 p.join()
二、queue实现数据共享
1 from multiprocessing import Process,Queue 2 3 def f(q): 4 q.put([5,'hel']) #往队列里加内容 5 6 def f2(q): 7 print(q.get()) 8 9 if __name__ == '__main__': 10 q = Queue() #创建进程队列对象 11 12 p_list = [] 13 for i in range(3): 14 p = Process(target=f,args=(q,)) #创建进程 15 p_list.append(p) 16 for p in p_list: 17 p.start() 18 for p in p_list: 19 p.join() 20 21 p2_list = [] 22 for i in range(3): 23 p2 = Process(target=f2,args=(q,)) 24 p2_list.append(p2) 25 for p2 in p2_list: 26 p2.start() 27 for p2 in p_list: 28 p2.join() 29 '''1.实现的功能:通过三个进程往一个队列里存三条内容,然后用另外三个进程从队列取内容并打印 30 2.实现的方式:在创建子进程时将主进程中创建的队列对象通过参数传到子进程中'''
三、Pipe实现进程通信
1 '''通过Pipe对象实现进程通信''' 2 from multiprocessing import Process,Pipe 3 4 def f(conn): 5 conn.send('月') 6 conn.close() 7 8 if __name__ == '__main__': 9 parent_conn,child_conn = Pipe() 10 p = Process(target=f,args=(child_conn,)) #创建进程 11 p.start() 12 print(parent_conn.recv()) 13 p.join() 14 15 '''通过Pipe对象实现进程通信,类似于socket通信一收一发'''
四、manager实现数据共享
1 from multiprocessing import Process,Manager 2 3 def f(d,l,n): 4 d[n] = '1' 5 d['2'] = 2 6 d[0.25] = None 7 l.append(n) 8 9 if __name__ == '__main__': 10 with Manager() as manager: 11 d = manager.dict() #用manager创建字典 12 l = manager.list() #用manager创建列表 13 p_list = [] 14 for i in range(10): 15 p = Process(target=f,args=(d,l,i)) 16 p.start() 17 p_list.append(p) 18 for p in p_list: 19 p.join() 20 21 print(d) 22 print(l) 23 24 '''1.十个进程同时去操作同一字典/列表 25 2.用Manager()对象创建的列表/字典可以被多个进程同时使用,实现数据共享'''
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步