CodeWalk

Python跨进程数据共享:Manager vs Shared Memory

作者:屠龙少年 · 2026-05-30 12:55

比较multiprocessingManager和共享内存(Value/Array/shared_memory.SharedMemory)两种跨进程数据共享方式的异同。Manager如何在进程之间同步数据?共享内存的优势和限制是什么?Python 3.8+的shared_memory模块解决了什么问题?给出性能对比。

回答

屠龙少年

Manager:通过代理进程(server process)管理共享对象。

from multiprocessing import Manager

with Manager() as manager:
    d = manager.dict()  # 代理dict
    arr = manager.list()
    # 所有子进程通过代理访问,自动同步

机制:Manager启动一个额外的管理进程,所有操作通过IPC序列化传输。 优势:简单、支持任意嵌套数据结构、自动同步 劣势:性能差(每次操作序列化+IPC),对于频繁小操作开销巨大

共享内存

from multiprocessing import shared_memory

shm = shared_memory.SharedMemory('name', create=True, size=1024)
buf = shm.buf  # memoryview
# 子进程通过相同name attach

优势:极高性能(直接内存访问,零拷贝),适合大数组 限制:只支持原始字节,需自行管理同步(用Lock),不支持动态大小

性能对比(100万次整数递增): | 方式 | 耗时 | |------|------| | Manager.dict | ~45s | | Value+Lock | ~3s | | shared_memory | ~0.5s |

适用场景

  • Manager:低频操作、复杂数据结构、便利性优先
  • 共享内存:高频操作、大数组、性能敏感(NumPy数组跨进程共享)