在进程之间共享 class 属性的最佳方式

Best way to share class attributes among processes

假设我有很多 class 的实例。这个 class 有一个 run 功能,我 运行 通过一个进程来将工作分散到多个核心上。 class 还具有我在 run 函数中访问的属性 c。问题是,当我更改其中一个实例的 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

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

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

Here 是一个快速演示的示例。线程是打印 5 的线程,而子进程打印 0。

Here 是线程库的文档,我相信这就是您要找的。