Python类继承多处理,访问类成员时遇到麻烦
问题内容:
简而言之,说我有以下几点:
import multiprocessing
class Worker(multiprocessing.Process):
def __init__(self):
multiprocessing.Process.__init__(self)
print "Init"
self.value = None
def run(self):
print "Running"
self.value = 1
p = Worker()
p.start()
p.join()
print p.value
我希望输出是:
Init
Running
1
相反,它是
Init
Running
None
有人可以向我解释为什么会这样吗?我不了解什么,应该如何正确执行?
谢谢。
问题答案:
您说的那一刻p.start()
,是一个独立的过程从主要过程中分叉出来。复制所有变量值。因此,主进程具有的一个副本p
,而分叉进程具有的单独副本p
。该Worker
修改的派生进程的副本p.value
,但主要进程的p.value
仍然是None
。
在流程之间共享对象有很多方法。在这种情况下,也许最简单的方法是使用mp.Value:
import multiprocessing as mp
class Worker(mp.Process):
def __init__(self):
print "Init"
mp.Process.__init__(self)
self.num = mp.Value('d', 0.0)
def run(self):
print "Running"
self.num.value = 1
p = Worker()
p.start()
p.join()
print p.num.value
请注意,的mp.Value
默认值为0.0
。不能设置为None
。