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

Python 在多处理中使用项级锁定共享字典(无管理器),python,dictionary,multiprocessing,shared-memory,Python,Dictionary,Multiprocessing,Shared Memory,我需要在多个进程之间共享一个dict对象。每个进程在运行时都将读取或修改现有项和/或将新项添加到dict中。我正在使用来自多处理的管理器对象,类似于此代码: import multiprocessing as mp def init_d(d, states): for s in states: if tuple(list(s) + [0]) not in d: for i in range(4): d[tuple(

我需要在多个进程之间共享一个
dict
对象。每个进程在运行时都将读取或修改现有项和/或将新项添加到dict中。我正在使用来自
多处理
管理器
对象,类似于此代码:

import multiprocessing as mp

def init_d(d, states):
    for s in states:
        if tuple(list(s) + [0]) not in d:
            for i in range(4):
                d[tuple(list(s) + [i])] = 0

if __name__ == '__main__':
    with mp.Manager() as manager:
        master_d = manager.dict()

        states1 = [(1, 2), (3, 4)]
        states2 = [(1, 2), (5, 6)]

        p1 = mp.Process(target=init_d, args=(master_d, states1))
        p2 = mp.Process(target=init_d, args=(master_d, states2))
        p1.start()
        p2.start()
        p1.join()
        p2.join()

        print(master_d)
然而,对于我的特殊用途来说,它非常慢。除了Manager比共享内存(根据)慢这一事实之外,更重要的问题是在我的应用程序中,每个进程一次只读取/修改/添加dict的一项,而与其余内容无关。因此,我不想锁定整个dict对象(这会导致巨大的速度降低),而是想知道是否有一种方法可以只锁定
\uuuu get\u item\uuuuuuuuu
\uuuuu set\u item\uuuuuuu
方法中的特定项

我看到了几个相关的问题,但没有答案。请不要告诉我关于线程安全和锁定的东西。此外,我不是在寻找一般情况,而是:

  • 我需要一个实现,它允许一个进程读取字典中的一个条目,同时通过另一个进程修改另一个条目,也可能通过另一个进程添加一个新条目,所有这些都是同时进行的
  • dict的
    dict
    可能非常大,我在某种程度上依赖于哈希表的O(1)属性。因此,我不能使用列表或元组
  • 每个流程仅读取/修改/添加一项。因此,本地dict然后在最后更新共享dict(在一批本地更新之后)不是一个选项

  • 非常感谢您的帮助

    到目前为止,这个问题有什么解决办法吗?