小编Meh*_*hdi的帖子

在多处理中使用项目级锁定共享字典(无需管理器)

我需要dict在多个进程之间共享一个对象。每个进程在运行时都会读取或修改现有项目和/或将新项目添加到字典中。我正在使用manager来自的对象multiprocessing类似于此代码的

\n\n
import multiprocessing as mp\n\ndef init_d(d, states):\n    for s in states:\n        if tuple(list(s) + [0]) not in d:\n            for i in range(4):\n                d[tuple(list(s) + [i])] = 0\n\nif __name__ == \'__main__\':\n    with mp.Manager() as manager:\n        master_d = manager.dict()\n\n        states1 = [(1, 2), (3, 4)]\n        states2 = [(1, 2), (5, 6)]\n\n        p1 = mp.Process(target=init_d, args=(master_d, states1))\n        p2 = mp.Process(target=init_d, args=(master_d, states2))\n        p1.start()\n        p2.start()\n        p1.join()\n        p2.join()\n\n        print(master_d)\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,对于我的特定使用来说,它非常慢。除了 Manager 比共享内存慢这一事实(根据python doc)之外,更重要的问题是在我的应用程序中,每个进程一次仅读取/修改/添加字典的一项,而没有任何事情可做与其余的。因此,我想知道是否有一种方法可以仅锁定特定项目,而不是锁定整个 dict 对象(这会导致速度大幅下降 …

python dictionary shared-memory multiprocessing

5
推荐指数
0
解决办法
860
查看次数