代码1 Queue (消息)队列
利用put/get 进行添加和消耗
由于多get了1次 ,end无法打印出,主程序等待。
#!/usr/bin/env python3 # -*- coding:utf-8 -*- # mail: infaaf@126.com import time import os from multiprocessing import Process,Queue,Manager def f(q, i): q.put(i) def f2(): pass if __name__ == '__main__': q = Queue() q.put('a') for i in range(3): p=Process(target=f,args=(q,i)) p.start() print(q.get()) print(q.get()) print(q.get()) print(q.get()) print(q.get()) print('end')
程序2 共享数据之 Manage
#!/usr/bin/env python3 # -*- coding:utf-8 -*- # mail: infaaf@126.com import time import os from multiprocessing import Process,Queue,Manager def f(q, i): q.put(i) def f2(d,d2,l,i): d['a']='aa' d['b']='bb' d2['222']=222 # 不报错,但是主程序d2={} l.append('11') if __name__ == '__main__': with Manager() as manager: # 以下,都要写在with段落后 d=manager.dict() l=manager.list(range(2)) #先初始化2个,也可以不初始化 d2={} p_list=[] for i in range(3): p=Process(target=f2,args=(d,d2,l,i)) p.start() p_list.append(p) for p in p_list: p.join() print(d) print(l) print(d2)
结果
{'a': 'aa', 'b': 'bb'}
[0, 1, '11', '11', '11']
{}
Process finished with exit code 0
以上2个例子,子进程,都需要通过传递消息Q 或者M。