与数据传递不同,数据共享,就是说两个进程都可以修改这个数据了。
只要用 Manager 即可,不需要加锁,因为manager会处理好互斥。
"""
数据共享:多个进程同时修改 不需要加锁Manager
1.创建变量
2.把变量作为参数传递给子进程
"""
from multiprocessing import Process, Manager
import os
#共享数据为:一个字典,一个列表
#每个进程都可传递值
def f(d, l):
d[1] = '1'
d['2'] = 2
d[0.25] = None
l.append(os.getid()) #每个进程id
print(l)
if __name__ == '__main__':
with Manager() as manager:
d = manager.dict() #生成一个字典,可在多个进程间共享和传递
l = manager.list(range(5)) #共享列表
p_list = []
for i in range(10): #创建了10个进程
p = Process(target=f, args=(d, l))#传了两个参数
p.start()
p_list.append(p)
for res in p_list: #等待结果
res.join()
print(d)
print(l)