Python 中multiprocessing 的 Manager模块

在 Python 的 multiprocessing 模块中,Manager 是一个用于跨进程共享数据的工具。由于多进程之间内存空间相互独立(不同于多线程共享同一内存),普通的变量、列表、字典等无法直接在进程间共享,而 Manager 提供了一种便捷的方式来创建可在多个进程间安全共享的对象。
Manager 的核心作用
Manager 通过创建一个服务器进程(manager process)来管理共享对象,其他进程通过网络连接(本地进程间通信)访问这个服务器进程中的对象。所有进程对共享对象的操作都会通过服务器进程中转,从而保证了数据的一致性和安全性。
支持的共享对象类型
Manager 支持创建多种常用的数据结构和同步原语,包括但不限于:
基础数据结构:list、dict、Namespace(类似对象的属性访问)、Value(单个值)、Array(数组)等。
同步工具:Lock(锁)、RLock(可重入锁)、Semaphore(信号量)、Event(事件)等。
其他:Queue(队列)、JoinableQueue(可等待的队列)等。
使用方法
使用 Manager 的基本步骤如下:
创建 Manager 实例(multiprocessing.Manager())。
通过 Manager 实例创建需要共享的对象(如 manager.list()、manager.dict())。
在子进程中使用这些共享对象(通过函数参数传递)。
结束后,通常需要手动关闭 Manager(可选,进程退出时会自动关闭)。
示例代码
下面是一个简单示例,展示多个进程通过 Manager 共享一个列表,并对其进行修改:

from multiprocessing import Process, Manager
import time

def add_item(shared_list, item):
“””向共享列表中添加元素”””
time.sleep(0.1) # 模拟耗时操作
shared_list.append(item)
print(f”进程 {item} 添加完成,当前列表:{shared_list}”)

if __name__ == “__main__”:
# 创建 Manager 实例
with Manager() as manager:
# 创建共享列表
shared_list = manager.list()

# 创建 3 个子进程,分别向共享列表添加元素
processes = []
for i in range(3):
p = Process(target=add_item, args=(shared_list, i))
processes.append(p)
p.start()

# 等待所有子进程完成
for p in processes:
p.join()

# 打印最终结果
print(f”最终共享列表:{shared_list}”)

输出(顺序可能因进程调度略有不同

进程 0 添加完成,当前列表:[0]
进程 1 添加完成,当前列表:[0, 1]
进程 2 添加完成,当前列表:[0, 1, 2]
最终共享列表:[0, 1, 2]

优缺点分析
优点:
支持多种复杂数据结构(如 dict、list),使用方式与普通对象一致,易于理解。
无需手动处理底层的进程同步细节(内部已实现基本同步)。
可用于跨机器的进程共享(通过网络连接远程 Manager)。
缺点:
由于依赖服务器进程中转,性能比基于共享内存的方式(如 multiprocessing.Value、multiprocessing.Array)稍低,适合数据量不大或交互不频繁的场景。
共享对象的操作需要通过网络通信,可能引入一定延迟。

欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!

66源码网 » Python 中multiprocessing 的 Manager模块

提供最优质的资源集合

立即查看 了解详情