почему эти мультиобработанные функции не меняют значение переменной? - PullRequest
0 голосов
/ 27 января 2020

все. У меня есть некоторые проблемы с многопроцессорностью в python. Как видите, я определил два класса, включая одно имя функции «add», которое увеличивает значение «a» на два.

class t1:
    def __init__(self):
        self.a = 0


class t2:
    def __init__(self):
        self.b = 0

    def add(self, t1):
        t1.a += 2
        print("adding")

, когда я создаю по одному экземпляру для каждого из классов и запускаю «add» Функция, как это, все в порядке.

temp1 = t1()
temp2 = t2()
for i in range(0, 10):
    temp2.add(temp1)
print(temp1.a)

эта часть кода показывает 20 в качестве значения "temp1.a", что полностью верно. Но проблема в том, что когда я хочу запустить приведенный выше код с использованием многопроцессорной обработки, он дает мне совершенно другой вывод.

temp1 = t1()
temp2 = t2()
processes = []
for i in range(0, 10):
    p = multiprocessing.Process(target=temp2.add, args=(temp1,))
    p.start()
    processes.append(p)

for process in processes:
    process.join()

print(temp1.a)

, несмотря на то, что он запускает функцию «add» десять раз, но он дает мне 0 в качестве вывода. В чем причина этой проблемы и как я могу это исправить?

1 Ответ

0 голосов
/ 27 января 2020

Вы можете сделать это:

p = multiprocessing.Process(target=temp2.add(temp1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...