You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下Python多进程中Manager字典不符合预期问题

macOS下multiprocessing Manager字典共享数据异常问题

目前仅在macOS系统中发现该问题:使用multiprocessing.Manager创建的共享字典,在进程池调用后无法正确保留子进程写入的数据。

最小可复现示例(MRE)

from multiprocessing import Pool, Manager
from functools import partial

def foo(d, n):
    d.setdefault("X", []).append(n)

def main():
    with Manager() as manager:
        d = manager.dict()
        with Pool() as pool:
            pool.map(partial(foo, d), range(5))
        print(d)

if __name__ == "__main__":
    main()

实际输出

{'X': []}

预期输出

{'X': [0, 1, 2, 3, 4]}

运行平台

macOS 14.3.1
Python 3.12.2

原本认为Manager正是用于处理进程间共享数据的场景,但结果不符合预期。此外,尝试添加锁机制的临时方案后,仍得到相同的错误输出:

from multiprocessing import Pool, Manager

def ipp(d, lock):
    global gDict, gLock
    gDict = d
    gLock = lock

def foo(n):
    global gDict, gLock
    with gLock:
        gDict.setdefault("X", []).append(n)

def main():
    with Manager() as manager:
        d = manager.dict()
        lock = manager.Lock()
        with Pool(initializer=ipp, initargs=(d, lock)) as pool:
            pool.map(foo, range(5))
        print(d)

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者jackal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:02:37