使用manager在进程之间事项共享数据.
栗子:
主进程调用manager,创建一个字典d和一个列表l,启动十个子进程,每个子进程都向d和l中放数据
from multiprocessing import Process,Manager
import os
def func(d,l):
d[os.getpid()] = os.getpid()
l.append(os.getpid())
print(d)
print(l)
if __name__ == '__main__':
with Manager() as manager:#不需要加锁 自动加了
d = manager.dict()#使用manager创建一个字典对象
l = manager.list(range(5))#使用manager创建一个列表对象
p_list = []
for i in range(10):
p = Process(target=func,args=(d,l))
p_list.append(p)
p.start()
for p in p_list:
p.join()
print(d)
print(l)
输出结果:
D:\7_Python\Python37\python.exe D:/7_Python/S14/其他/aaaa.py {10120: 10120} [0, 1, 2, 3, 4, 10120] {10120: 10120, 9700: 9700} [0, 1, 2, 3, 4, 10120, 9700] {10120: 10120, 9700: 9700, 4968: 4968} [0, 1, 2, 3, 4, 10120, 9700, 4968] {10120: 10120, 9700: 9700, 4968: 4968, 14212: 14212} [0, 1, 2, 3, 4, 10120, 9700, 4968, 14212] {10120: 10120, 9700: 9700, 4968: 4968, 14212: 14212, 2884: 2884} [0, 1, 2, 3, 4, 10120, 9700, 4968, 14212, 2884] {10120: 10120, 9700: 9700, 4968: 4968, 14212: 14212, 2884: 2884, 4860: 4860} [0, 1, 2, 3, 4, 10120, 9700, 4968, 14212, 2884, 4860] {10120: 10120, 9700: 9700, 4968: 4968, 14212: 14212, 2884: 2884, 4860: 4860, 9712: 9712} [0, 1, 2, 3, 4, 10120, 9700, 4968, 14212, 2884, 4860, 9712] {10120: 10120, 9700: 9700, 4968: 4968, 14212: 14212, 2884: 2884, 4860: 4860, 9712: 9712, 14164: 14164} [0, 1, 2, 3, 4, 10120, 9700, 4968, 14212, 2884, 4860, 9712, 14164] {10120: 10120, 9700: 9700, 4968: 4968, 14212: 14212, 2884: 2884, 4860: 4860, 9712: 9712, 14164: 14164, 15000: 15000, 2948: 2948} [0, 1, 2, 3, 4, 10120, 9700, 4968, 14212, 2884, 4860, 9712, 14164, 15000, 2948] {10120: 10120, 9700: 9700, 4968: 4968, 14212: 14212, 2884: 2884, 4860: 4860, 9712: 9712, 14164: 14164, 15000: 15000, 2948: 2948} [0, 1, 2, 3, 4, 10120, 9700, 4968, 14212, 2884, 4860, 9712, 14164, 15000, 2948] {10120: 10120, 9700: 9700, 4968: 4968, 14212: 14212, 2884: 2884, 4860: 4860, 9712: 9712, 14164: 14164, 15000: 15000, 2948: 2948} [0, 1, 2, 3, 4, 10120, 9700, 4968, 14212, 2884, 4860, 9712, 14164, 15000, 2948] Process finished with exit code 0