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
相关产品推荐
相关产品推荐

