如何在Python中的多个进程之间共享字典而无需锁定

2024-04-12

我需要在多个进程之间共享一个巨大的字典(大小约为 1 GB),但是因为所有进程都将始终从中读取。我不需要锁定。

有没有办法在不锁定的情况下共享字典?

python中的多处理模块提供了一个Array类,它允许通过设置共享而无需锁定
锁=假
然而,多处理模块中的管理器没有为字典提供这样的选项。


好吧,事实上,关于 Manager 的指令根本没有锁!我想这对于您可以通过管理器创建的其他共享对象也是如此。我怎么知道这个?我试过:

from multiprocessing import Process, Manager

def f(d):
    for i in range(10000):
        d['blah'] += 1

if __name__ == '__main__':
    manager = Manager()

    d = manager.dict()
    d['blah'] = 0
    procs = [ Process(target=f, args=(d,)) for _ in range(10) ]
    for p in procs:
        p.start()
    for p in procs:
        p.join()

    print d

如果有锁d,结果将是100000。但相反,结果是相当随机的,所以这只是一个很好的说明,为什么当你修改东西时需要锁;-)

所以继续使用manager.dict().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中的多个进程之间共享字典而无需锁定 的相关文章

随机推荐