#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 не позволяет передавать глобальные переменные между процессами, переменная никогда не отправлялась и не обновлялась. Это не относится к многопоточности.