Meh*_*hdi 5 python dictionary shared-memory multiprocessing
我需要dict在多个进程之间共享一个对象。每个进程在运行时都会读取或修改现有项目和/或将新项目添加到字典中。我正在使用manager来自的对象multiprocessing类似于此代码的
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)\nRun Code Online (Sandbox Code Playgroud)\n\n然而,对于我的特定使用来说,它非常慢。除了 Manager 比共享内存慢这一事实(根据python doc)之外,更重要的问题是在我的应用程序中,每个进程一次仅读取/修改/添加字典的一项,而没有任何事情可做与其余的。因此,我想知道是否有一种方法可以仅锁定特定项目,而不是锁定整个 dict 对象(这会导致速度大幅下降__get_item__)__set_item__。\xc2\xa0
我看到了几个相关的问题,但没有答案。请不要告诉我有关线程安全和锁定的内容。另外,我不是在寻找一般情况,而是:
\n\ndict可能非常大,并且我以某种方式依赖哈希表的 O(1) 属性。因此,我不能使用列表或元组来代替。非常感谢任何帮助。
\n