Skip to main content
 首页 » 编程设计

python之python manager.dict() 锁定是如何工作的 :

2024年09月07日35bhlsheji

A managers.dict()允许跨进程共享字典并执行线程安全操作。 在我的例子中,每个协调器进程都使用 m 元素创建共享字典,而 n 工作进程读取和写入单个字典键。

managers.dict() 是否为 dict 或 m 锁(其中的每个键一个)有一把锁?

当工作人员不必相互通信时,除了共享字典之外,还有其他方法可以将 m 元素共享给 n 工作人员吗?

相关python-manager-dict-is-very-slow-compared-to-regular-dict

请您参考如下方法:

经过一些尝试,我可以说每个经理指令只有一个锁。 这是证明它的代码:

import time 
import multiprocessing as mp 
 
 
def process_f(key, shared_dict): 
        values = [i for i in range(64 * 1024 * 1024)] 
        print "Writing {}...".format(key) 
        a = time.time() 
        shared_dict[key] = values 
        b = time.time() 
        print "released {} in {}ms".format(key, (b-a)*1000) 
 
 
def main(): 
    process_manager = mp.Manager() 
    n = 5 
    keys = [i for i in range(n)] 
    shared_dict = process_manager.dict({i: i * i for i in keys}) 
 
    pool = mp.Pool(processes=n) 
 
    for i in range(n): 
        pool.apply_async(process_f, (keys[i], shared_dict)) 
    time.sleep(20) 
 
 
if __name__ == '__main__': 
    main() 

输出:

Writing 4... 
Writing 3... 
Writing 1... 
Writing 2... 
Writing 0... 
released 4 in 3542.7968502ms 
released 0 in 4416.22900963ms 
released 1 in 6247.48706818ms 
released 2 in 7926.97191238ms 
released 3 in 9973.71196747ms 
 
Process finished with exit code 0 

写作时间的增加表明正在发生的等待。