多处理:进程间字典共享
考虑多个进程在共享队列 Q 上操作并操作全局字典的场景,D。令人惊讶的是,尽管在子进程中观察到了修改,但在加入 Q 后访问 D 会显示一个空字典。
这个行为源于同步问题。每个进程都在自己的内存空间上运行,子进程中对 D 所做的更改不会自动反映在主进程中。为了解决这个问题,同步措施是必要的。
解决方案:使用 Manager 对象
Python 标准库提供了使用 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)
在此示例中,Manager 对象的 dict() 方法创建一个共享字典 d,所有进程都可以访问该字典。子进程中对 d 所做的更改会通过 Manager 对象管理的共享内存传播到主进程。
输出:
$ python mul.py {1: '111', '2': 6}
以上是如何在Python中的多个进程之间共享和修改字典?的详细内容。更多信息请关注PHP中文网其他相关文章!