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(在一批本地更新之后)不是一个选项
非常感谢您的帮助 到目前为止,这个问题有什么解决办法吗?