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

时间:2010-05-29 21:15:39

标签: python multithreading

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

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

python中的多处理模块提供了一个Array类,它允许通过设置
来进行无锁定共享     锁定=假
但是在多处理模块中管理器提供的词典没有这样的选项。

1 个答案:

答案 0 :(得分:5)

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

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