一个程序,该程序创建在可连接队列上工作的多个进程Q,并且最终可能会操纵全局字典D来存储结果。(因此,每个子进程都可以D用来存储其结果,并查看其他子进程正在产生什么结果)
Q
D
如果我在子进程中打印字典D,则可以看到对它进行的修改(即在D上)。但是在主流程加入Q之后,如果我打印D,那就是空洞的字典!
我了解这是同步/锁定问题。有人可以告诉我这里发生了什么,如何同步对D的访问?
普遍的答案涉及使用Manager对象。改编自文档:
Manager
from multiprocessing import Process, Manager def f(d): d[1] += '1' d['2'] += 2 if __name__ == '__main__': manager = Manager() d = manager.dict() d[1] = '1' d['2'] = 2 p1 = Process(target=f, args=(d,)) p2 = Process(target=f, args=(d,)) p1.start() p2.start() p1.join() p2.join() print d
输出:
$ python mul.py {1: '111', '2': 6}