You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:35:19