假设我有很多类的实例。这个类有一个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
确保变量在进程间正确同步的最佳方法是什么? (我的实际代码要复杂得多 - 包括更多的对象,类和变量)
答案 0 :(得分:1)
multiprocessing
提供了一个API,可以轻松生成子进程,而不是线程。这不仅仅是语义;你没有得到预期结果的原因是单独的进程不共享内存空间(线程所在的位置)。
Here是一个快速举例说明。线程是打印5的线程,而子进程打印0。
Here是线程库的文档,我相信这是您正在寻找的内容。