我想知道是否要通过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()
下面列出了一些相关问题,但它们似乎相互矛盾。