本文摘自php中文网,作者不言,侵删。
本篇文章给大家带来的内容是关于python中进程间数据通讯模块multiprocessing.Manager的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。目前开发中有遇到进程间需要共享数据的情况. 所以研究了下multiprocessing.Manager, 主要会以dict为例子, 说明下进程间共享(同一个父进程).
dict使用说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import multiprocessing
# 1. 创建一个Manger对象
manager = multiprocessing.Manager()
# 2. 创建一个dict
temp_dict = manager.dict()
# 3. 创建一个测试程序
def test(idx, test_dict):
test_dict[idx] = idx
# 4. 创建进程池进行测试
pool = multiprocessing.Pool(4)
for i in range(100):
pool.apply_async(test, args=(i, temp_dict))
pool.close()
pool.join()
print (temp_dict)
|
too simple.
简单的源码分析
这时我们再看一个例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import multiprocessing
# 1. 创建一个Manger对象
manager = multiprocessing.Manager()
# 2. 创建一个dict
temp_dict = manager.dict()
temp_dict[ 'test' ] = {}
# 3. 创建一个测试程序
def test(idx, test_dict):
test_dict[ 'test' ][idx] = idx
# 4. 创建进程池进行测试
pool = multiprocessing.Pool(4)
for i in range(100):
pool.apply_async(test, args=(i, temp_dict))
pool.close()
pool.join()
print (temp_dict)
|
可以看到输出结果是奇怪的{'test': {}}
如果我们简单修改一下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import multiprocessing
# 1. 创建一个Manger对象
manager = multiprocessing.Manager()
# 2. 创建一个dict
temp_dict = manager.dict()
temp_dict[ 'test' ] = {}
# 3. 创建一个测试程序
def test(idx, test_dict):
row = test_dict[ 'test' ]
row[idx] = idx
test_dict[ 'test' ] = row
# 4. 创建进程池进行测试
pool = multiprocessing.Pool(4)
for i in range(100):
pool.apply_async(test, args=(i, temp_dict))
pool.close()
pool.join()
print (temp_dict)
|
这时输出结果就符合预期了.
阅读剩余部分
相关阅读 >>
Python中的%是什么意思
Python中关于string相关操作的实例分析
Python 装饰器
pycharm上创建一个Python程序全过程
Python中绝对值怎么表示
Python如何安装cvxopt
Python中if语句的基本格式
Python工作岗位有哪些
如何用Python搭建匿名代理池?搭建匿名代理池的方法
怎么在Python安装pil
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python中进程间数据通讯模块multiprocessing.Manager的介绍