python中进程间数据通讯模块multiprocessing.Manager的介绍


本文摘自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》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...