Глобальная переменная не обновляется в цикле внешнего процесса - PullRequest
0 голосов
/ 06 марта 2019

Я пытался передать данные в цикл в другом процессе, создавая пустой объект, в который я помещаю данные. Когда я изменяю содержимое моего объекта, процесс, кажется, не обновляется, и продолжает возвращать то же значение.

Вот код, который я пробовал:

from multiprocessing import Process
from time import sleep


class Carrier():  # Empty object to exchange data
    pass


def test():
    global carry
    while True:
        print(carry.content)
        sleep(0.5)

carry = Carrier()
carry.content = "test"  # Giving the value I want to share

p = Process(target=test, args=())
p.start()
while True:
    carrier.content = input()  # Change the value from the object

Я также пытался каждый раз удалять объект из памяти и переопределять его в следующем цикле, но, похоже, он не дает никакого эффекта, вместо этого он сохраняет первоначальное значение «test», то, которое присутствует при его выполнении.

1 Ответ

0 голосов
/ 06 марта 2019

Я предполагаю, что вы запускаете эту программу в Windows, поскольку дочерний процесс или потоки, которые вы открываете в программе, не зависят от их родительского процесса. Таким образом, вы не можете обмениваться данными между процессами, как этот.

Существует возможность совместного использования данных при запуске Python в Linux, поскольку порожденные процессы являются дочерними для родительского процесса, где он может совместно использовать данные.

Чтобы иметь возможность обмениваться данными между родительским и дочерним процессами независимо от базовой ОС, вы можете увидеть эту ссылку - Как обмениваться данными между процессами Python?

...