python - 如何在不锁定的情况下在python中的多个进程之间共享字典

标签 python multithreading

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

有什么办法可以不加锁的共享字典吗?

python中的multiprocessing模块提供了一个Array类,通过设置可以实现无锁共享
锁=假
然而,在多处理模块中,管理器提供的字典没有这样的选项。

最佳答案

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

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()

关于python - 如何在不锁定的情况下在python中的多个进程之间共享字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936626/

相关文章:

java - 从第一个 JFrame 调用的方法在第二个 JFrame 中不执行任何操作

java - 创建符号链接(symbolic link)时的并发执行异常和 nio.file.NoSuchFileException

python - 为什么线程会增加处理时间?

java - setTheme(R.style.MyTheme) 不适用于线程

python - 全局名称 're' 未定义

python - 对 groupby 之后的计数值创建的频率计数进行减去和除法

python - 奇点行为 : shell vs exec

java - 了解同步

python - Tensorflow:赋值操作的优先级

python - 如何在多核上运行 Keras?