本文摘自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 3.8的新功能
介绍Python中星号变量的特殊用法
Python输出语句如何写
如何理解Python的类
Python可以用来干什么?
如何在shell脚本中检查Python版本?
Python如何配置清华镜像源
Python中count函数的用法详解
Python抓取网页乱码的原因及解决方法
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python中进程间数据通讯模块multiprocessing.Manager的介绍