Невозможно получить данные от родительского процесса к дочернему процессу

#python #python-3.x #multithreading #python-multiprocessing

#python #python-3.x #многопоточность #python -многопроцессорная обработка

Вопрос:

Я использую программу Python3 для создания двух процессов: дочернего, рожденного из родительского процесса. Все начинается с родительского процесса. Цель состоит в том, чтобы запустить процесс, предоставить ему данные датчика в реальном времени и завершить его, когда показания датчика превысят определенный порог.

sensor_data Получается через поток в родительском процессе как:

 t = Thread(target=dump_sensor_data,args=())
t.start()
  

И я проверил, что текущие данные могут использоваться в любой функции как

 while True:
    global sensor_data
    print(sensor_data)
  

Дочерний процесс определяется как:

 def fa():
    global sensor_data
    while sensor_data>300:
        print(f'I am printing {sensor_data} from fa')
        time.sleep(0.7)
  

Я запускаю его как:

 processes_list=[]
pa=Process(target=fa, args=())
pa.start()
processes_list.append(pa) 
  

Теперь я создаю еще одну функцию наблюдения, которая убивает дочерний процесс fa() , как только число sensor_data превышает 300.

 def watchguard():
    global sensor_data
    while True:
        print(lidar1)
        if sensor_data > 300:
            for p in processes_list:
                print(f'terminating process {p}')
                p.terminate()
                p.join()
                return
  

Но это то, что происходит

 0
terminating process <Process(Process-1, started)>
  

Это 0 неверное значение sensor_data , которое я проверил, и оно должно быть выше 1000. Кроме того, это приводит к завершению процесса.

Почему данные не передаются этому дочернему процессу?

Комментарии:

1. вы говорите «Превышает 300», но ваш if clauase говорит, что если sensor_data меньше 300, то завершите все процессы в process_list ..

2. Это опечатка. Извините. Я исправлю это

Ответ №1:

Хорошо, я понял.

Поскольку многопроцессорная обработка Python не позволяет передавать глобальные переменные между процессами, переменная никогда не отправлялась и не обновлялась. Это не относится к многопоточности.