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

Python多进程监控机械臂坐标遇异常:Move_Relative未生效,坐标为0

问题分析与解决方案

错误原因

  • 多进程内存隔离:Python multiprocessing 创建的子进程会拥有独立的内存空间,主进程定义的全局变量x、y会被复制到每个子进程中,子进程对变量的修改完全独立,不会同步到其他进程(包括主进程和另一个子进程)。所以Move_Relative修改的是自己进程内的x/y副本,monitor_coordinates打印的却是自己进程内的初始值0。
  • 监控时机问题:monitor_coordinates仅执行一次打印,大概率在Move_Relative还未开始修改变量时就已经完成打印并退出。

修正方案

使用multiprocessing提供的共享内存对象(如Value)实现进程间变量共享,同时调整监控逻辑,让它能持续输出变量状态。

修正后的代码

import multiprocessing
import time

# 用共享内存定义变量:'i'表示整数类型,'d'表示双精度浮点数
x = multiprocessing.Value('i', 0)
y = multiprocessing.Value('d', 0.0)

def monitor_coordinates():
    # 持续监控5秒后自动退出,避免无限循环
    end_time = time.time() + 5
    while time.time() < end_time:
        # 通过value属性访问共享变量的当前值
        print(f"x: {x.value} y: {y.value}")
        time.sleep(0.5)

def Move_Relative():    
    while x.value < 100000:
        # 修改共享变量的value属性
        x.value += 1   
        y.value += 0.5
        # 加微小延迟,避免修改过快导致监控无法捕捉变化
        time.sleep(0.0001)

if __name__=='__main__':
    q = multiprocessing.Process(target=Move_Relative) 
    q.start()
    p = multiprocessing.Process(target=monitor_coordinates)    
    p.start()
    
    p.join()  # 先等待监控进程结束
    q.terminate()  # 终止移动进程
    q.join()

关键说明

  • multiprocessing.Value创建的共享变量会在进程间共享内存空间,所有进程对value属性的修改都会实时同步。
  • 给Move_Relative添加微小延迟,避免变量修改速度过快导致监控进程无法捕捉到变化;监控进程设置5秒运行时长,保证程序能正常退出。
  • 先等待监控进程结束再终止移动进程,避免出现进程残留问题。

内容的提问来源于stack exchange,提问作者Adnane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:27:38