首页 > 解决方案 > 无法从父进程获取数据到子进程

问题描述

我正在使用 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。此外,这会导致进程被杀死。

为什么数据没有传递给这个子进程?

标签: pythonpython-3.xmultithreadingpython-multiprocessing

解决方案


好,我知道了。

由于 Python 多处理不允许在进程之间传递全局变量,因此该变量从未被发送或更新。这不是多线程的情况。


推荐阅读