在进程间共享类属性的最佳方法

时间:2017-07-03 17:24:54

标签: python python-multiprocessing

假设我有很多类的实例。这个类有一个run函数,我正在通过一个进程运行,以便在多个核心上分散工作。该类还具有我在c函数中访问的属性run。问题是,当我更改其中一个实例的c时,它在run函数的输出中不会被视为已更新。

演示:

import multiprocessing
class Test:
    def __init__(self):
        self.c = 0
    def run(self):
        while True:
            print self.c
test1 = Test()
p = Process(target = test1.run, args=())
p.start()
test1.c = 5

预期产出:

5
5
5
5

实际输出:

0
0
0
0

确保变量在进程间正确同步的最佳方法是什么? (我的实际代码要复杂得多 - 包括更多的对象,类和变量)

1 个答案:

答案 0 :(得分:1)

multiprocessing提供了一个API,可以轻松生成子进程,而不是线程。这不仅仅是语义;你没有得到预期结果的原因是单独的进程不共享内存空间(线程所在的位置)。

Here是一个快速举例说明。线程是打印5的线程,而子进程打印0。

Here是线程库的文档,我相信这是您正在寻找的内容。