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。此外,这会导致进程被杀死。
为什么数据没有传递给这个子进程?
解决方案
好,我知道了。
由于 Python 多处理不允许在进程之间传递全局变量,因此该变量从未被发送或更新。这不是多线程的情况。
推荐阅读
- flask - 为 Dreamhost Flask 应用程序自动创建 tmp/restart.txt
- javascript - 如何从javascript中的url获取id?
- dynamic - 没有 STB_GNU_UNIQUE 的静态链接 stdc++ 在 dlclose 时导致内存泄漏
- powershell - PowerShell脚本查找数字,如果大于发送电子邮件
- sql - 如何将此 mysql 查询转换为在雪花/mpp 上运行
- java - Java "x += y" 和 "x = x+y" 产生不同的结果
- python-3.x - 使用 sqlite3 插入二进制数据
- azure - 身份验证不会重定向回我在 Xamarin.Forms 中的 Android 应用
- javascript - 如何将点击处理程序添加到已经使用 onClick 的第三方组件?
- java - 如何使用 Java 在现有 Json 文件上附加数据?