Python多线程访问同一串口的冲突解决及优化方案问询
串口多线程访问冲突问题及优化尝试
问题场景
我有一块热板连接在COM口上,Python程序中的线程A持续从该串口查询数据(发送指令给热板并等待响应)并进行实时绘图,主线程则需要随时访问同一串口(仅发送指令)调节温度。若无保护机制,线程A与主线程会发生冲突,导致主线程偶尔出现串口写入错误。
当前临时解决方案
我使用两个全局变量临时暂停线程A,相关代码如下:
主线程代码
stop_plot_heat_flag = 1 while confirm_stop_plot_flag == 0: time.sleep(0.1) Class_heating1.start_heat_each(0,thermal_set) stop_plot_heat_flag,confirm_stop_plot_flag = 0,0
线程A代码
if stop_plot_heat_flag == 1: confirm_stop_plot_flag = 1 elif stop_plot_heat_flag == 0: inquire_thermal_data()
这段代码可正常运行,但如果有多个线程需要访问同一串口,就会需要大量全局变量,因此希望找到更简洁的处理方式(要求主线程优先)。
更新1:尝试锁机制优化
根据建议,我在两个线程中引入了锁机制:
lock.acquire() ... lock.release()
目前程序运行正常,我会持续监控稳定性。
更新2:锁机制下的进一步微调
在极少数情况下(已比之前的冲突频率低很多),使用锁后仍会出现冲突。我在lock.acquire()后添加了time.sleep(0.1),正在观察是否能彻底解决问题。
内容的提问来源于stack exchange,提问作者user7768436
相关产品推荐
相关产品推荐

