本文摘自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编码需要注意的地方
Python全栈指的是什么
Python 中类的静态变量怎么理解
Python中如何求列表list的平均数
Python为什么是脚本语言
分享关于Python中的题目实例
Python编程基础是什么
看看 Python django开发 异常及解决办法
Python怎么安装tensorflow
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python中进程间数据通讯模块multiprocessing.Manager的介绍