Python类继承多处理,访问类成员时遇到问题
简言之,假设我有以下几点:Python类继承多处理,访问类成员时遇到问题,python,multiprocessing,Python,Multiprocessing,简言之,假设我有以下几点: import multiprocessing class Worker(multiprocessing.Process): def __init__(self): multiprocessing.Process.__init__(self) print "Init" self.value = None def run(self): print "Running" sel
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
的默认值为0.0
。无法将其设置为None
谢谢。似乎在构造函数中创建num值(而不是在main中构造并传递它)也可以正常工作。我暂时不接受这个答案(我听说这是SO的惯例)。
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