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
相关产品推荐
相关产品推荐

