【问题标题】:Unable to get data from parent process to child process无法从父进程获取数据到子进程
【发布时间】:2020-10-10 08:35:35
【问题描述】:

我正在使用 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) 

现在,我创建另一个监视守卫函数,它会在 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。此外,这会导致进程被终止。

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

【问题讨论】:

  • 您说“超过 300”,但您的 if 子句说如果 sensor_data 低于 300,则终止 process_list 中的所有进程 ..
  • 这是一个错字。对不起。我会改正的

标签: python python-3.x multithreading python-multiprocessing


【解决方案1】:

好的,我知道了。

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

【讨论】:

    猜你喜欢
    • 2011-07-16
    • 2013-07-18
    • 2017-05-23
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多