gpt4 book ai didi

python - python manager dict 会自动锁定它的值吗?

转载 作者:行者123 更新时间:2023-12-05 07:27:08 39 4
gpt4 key购买 nike

我想知道如果我通过 multiprocessing.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()

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

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

How python manager.dict() locking works:

最佳答案

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

关于python - python manager dict 会自动锁定它的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54056393/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com