python管理器字典会自动锁定其值



我想知道我是否通过多处理创建了一个字典。Mananger(),当处理操作它时,它的值会自动锁定,还是我应该显式地编写 lock.acquire/release?

以前,我在函数中显式编写了 lock.acquire/release,但是,似乎我的代码存在死锁问题。这很奇怪,因为我认为我的代码中只有一个锁。因此,我想知道 manager.dict 是否会自动提供另一个锁。当我删除 lock.acquire/release 时,代码工作正常。但我不确定该词是否正确。

import multiprocessing as mp
from functools import partial
def function(file_name, d, lock):
    key, value = read_files(file_name)
    #lock.acquire()
    if (key not in d):
        d[key] = []
    tmp = d[key]
    tmp.append(value)
    d[key] = tmp
    #lock.release()
if __name__ == '__main__':
    manager = mp.Manager()
    d = manager.dict()
    lock = manager.Lock()
    partial_function = partial(function, d=d, lock=lock)
    pool = mp.Pool(10)
    pool.map(partial_function, files) #files is a predefined list
    pool.close()
    pool.join()

下面列出了一些相关问题,但它们似乎相互矛盾。

为什么 manager.dict 在写进去之前需要锁定?

python manager.dict() 锁定的工作原理:

是的,"锁定"会自动发生multiprocessing.Manager().dict()。它是线程安全的,因为内部结构只允许一个进程在任何给定时间访问(读取或写入)对象。

最新更新