Kann keine Klassenvariablen mit Multiprocessing.Process-Objekt in Python3 ändern
Wenn ich eine Klasse mit einer Klassenvariablen schreibe, zwei Klassenobjekte generiere und den Wert der Klassenvariablen mithilfe einer Methode eines der beiden Objekte ändere, wird der Wert der Klassenvariablen natürlich auch für das andere Objekt geändert. Das meine ich mit Code:
class DemoClass:
ClassVariable = False
def __init__(self):
pass
def do(self):
print(DemoClass.ClassVariable)
DemoClass.ClassVariable = True
class1 = DemoClass()
class1.do() # False
class2 = DemoClass()
class2.do() # True
Wenn ich jedoch dasselbe mit multiprocessing.Process mache, funktioniert es nicht. Der Wert der Klassenvariablen wird nur für das Objekt geändert, das ihn geändert hat:
import multiprocessing
class DemoProcess(multiprocessing.Process):
ClassVariable = False
def __init__(self):
multiprocessing.Process.__init__(self)
def run(self):
print(DemoProcess.ClassVariable)
DemoProcess.ClassVariable = True
print(DemoProcess.ClassVariable)
if __name__ == '__main__':
process_list = []
p1 = DemoProcess()
process_list.append(p1)
p1.start() # False True
p2 = DemoProcess()
process_list.append(p2)
p2.start() # False True; should be: True True
for p in process_list:
p.join()
Der Code verhält sich so, als ob jeder Prozess eine neue Klassenvariable generiert. Mache ich etwas falsch