Невозможно изменить переменные класса с помощью multiprocessing.Process объекта в Python3
Если я пишу класс с переменной класса, генерирую два объекта класса и изменяю значение переменной класса, используя метод одного из двух объектов, значение переменной класса, конечно, также изменяется для другого объекта. Вот что я имею в виду в коде:
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
Однако, если я делаю то же самое с многопроцессорной обработкой. Процесс не работает. Значение переменной класса изменится только для объекта, который его изменил:
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()
Код ведет себя так, как будто каждый процесс генерирует новую переменную класса. Я делаю что-то неправильно?