【发布时间】: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