python manager dict是否会自动锁定其值?

时间:2019-01-05 21:22:50

标签: python dictionary multiprocessing

我想知道是否要通过multiprocessing.Mananger()创建一个dict,在处理该操作时会自动锁定其值,还是应该显式地编写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()

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

Why a manager.dict need to be lock before writing inside?

How python manager.dict() locking works:

0 个答案:

没有答案