前言
记录一下学习进度.
1.进程之间数据共享manager
在前面提到的Queue和Pipe,都只能实现进程之间数据的传递,而并不能实现数据的真正共享.Manager是可以实现数据的真正共享,对数据进行修改.
2.manager用法
from multiprocessing import Process,Manager
import os
def f(d,l):
d['进程{}'.format(os.getpid())] = str(os.getpid())
l.append(os.getpid())
if __name__ == '__main__':
manager = Manager()
d = manager.dict() # 生成一个字典,用于在多个进程之间共享
l = manager.list() # 生成一个列表,用于在多个进程之间共享
processing_list = []
for i in range(10):
p = Process(target=f,args=(d,l))
p.start()
processing_list.append(p)
for p in processing_list:
p.join()
print('d:',d)
print('len(d):',len(d))
print('l:',l)
print('len(l):',len(l))
执行结果:
d: {'进程5043': '5043', '进程5046': '5046', '进程5036': '5036', '进程5037': '5037', '进程5057': '5057', '进程5039': '5039', '进程5052': '5052', '进程5040': '5040', '进程5055': '5055', '进程5049': '5049'}
len(d): 10
l: [5036, 5037, 5039, 5040, 5043, 5046, 5049, 5052, 5057, 5055]
len(l) 10
程序解释:
我们先来看看def f()中干了什么
def f(d,l):
d['进程{}'.format(os.getpid())] = str(os.getpid())
l.append(os.getpid())
功能:传入两个参数,一个是字典,一个是列表,然后对字典和列表做相应的修改
接下来我们看看主程序中干了什么
manager = Manager()
d = manager.dict() # 生成一个字典,用于在多个进程之间共享
l = manager.list() # 生成一个列表,用于在多个进程之间共享
先创建一个Manager对象,然后用manager对象生成一个字典和一个列表
for i in range(10):
p = Process(target=f,args=(d,l))
p.start()
processing_list.append(p)
启动十个进程,将上面生成的manager类型的字典和列表作为参数传递给函数f(),这样的话就做到了每个进程都会修改这个字典和列表.
结果就是,是个进程都会这个字典和列表做了修改!!!
写在最后
本文是个人的一些学习笔记,如有侵权,请及时联系我进行删除,谢谢大家.