在进程之间共享 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 是线程库的文档,我相信这就是您要找的。
假设我有很多 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 是线程库的文档,我相信这就是您要找的。