使用multiprocessing实现LiDAR触发的进程启停功能求助
LiDAR传感器数据记录与进程控制项目
我正在开发一个Python项目,核心目标是根据LiDAR传感器检测的距离控制servoSweep进程的启停:
- 当检测距离≤20时,停止执行
servoSweep的p2进程 - 当距离≥20且p2未运行时,重启该进程
这是我的第一个Python项目,代码较为杂乱,以下是实现代码:
if __name__ == '__main__': try: if ser.is_open == False: ser.open() p1 = Process(target=getTFminiData) p1.start() p2 = Process(target=servoThing.servoSweep) p2.start() while True: dist = getTFminiData() print('safe distance: ', dist) if dist <= 20: p2.kill() p2.join() print('too close', dist) if dist >= 20 and not p2.is_alive(): p2.start() except KeyboardInterrupt: # Ctrl+C if ser is not None: ser.close()
代码改进提示
- 进程重启问题:Python的
Process对象一旦调用kill()或自然结束后,无法再次调用start(),需要重新创建新的Process实例才能重启进程,否则会抛出AssertionError。 - 串口读取冲突:
getTFminiData同时在主进程和p1子进程中调用,可能导致串口资源竞争,建议只在一个进程中读取数据,通过队列或共享变量传递给主进程使用。 - 代码简洁性:可以将
p2.is_alive() == False简化为not p2.is_alive(),ser != None改为ser is not None(Python中判断None的标准写法)。
内容的提问来源于stack exchange,提问作者Evan Johnstone
相关产品推荐
相关产品推荐

