无法从父进程获取数据到子进程
Unable to get data from parent process to child process
我正在使用 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)
现在,我创建了另一个 watch-guard 函数,一旦 sensor_data
超过 300,它就会杀死子进程 fa()
。
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 以上。另外,这会导致进程被杀死。
为什么数据没有传递给这个子进程?
好的,我知道了。
由于Python multiprocessing 不允许在进程之间传递全局变量,因此从未发送或更新变量。多线程不是这种情况。
我正在使用 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)
现在,我创建了另一个 watch-guard 函数,一旦 sensor_data
超过 300,它就会杀死子进程 fa()
。
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 以上。另外,这会导致进程被杀死。
为什么数据没有传递给这个子进程?
好的,我知道了。
由于Python multiprocessing 不允许在进程之间传递全局变量,因此从未发送或更新变量。多线程不是这种情况。