Python-多重处理:如何在多个流程之间共享指令?

发布于 2021-02-02 23:14:12

一个程序,该程序创建在可连接队列上工作的多个进程Q,并且最终可能会操纵全局字典D来存储结果。(因此,每个子进程都可以D用来存储其结果,并查看其他子进程正在产生什么结果)

如果我在子进程中打印字典D,则可以看到对它进行的修改(即在D上)。但是在主流程加入Q之后,如果我打印D,那就是空洞的字典!

我了解这是同步/锁定问题。有人可以告诉我这里发生了什么,如何同步对D的访问?

关注者
0
被浏览
82
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    普遍的答案涉及使用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}
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看