提升Python通过COM端口读取7路传感器数据的速度
优化方案及缓冲区使用建议
一、核心优化:线程分离读写+缓冲区机制
必须用线程拆分串口读取与数据写入流程,这是突破性能瓶颈的关键:
- 给每台COM设备分配独立读取线程:每个线程负责从对应串口持续读取数据,解析后存入线程安全的缓冲区(比如
queue.Queue,可设置最大队列长度防止内存溢出)。 - 单独启动写入线程:从缓冲区批量取出数据,统一执行写入操作,避免频繁触发IO开销。之前仅给单个传感器用线程的力度不够,要覆盖所有设备的读取流程。
二、Excel写入性能优化(重灾区)
Pandas直接写Excel的效率极低,尤其是单条追加,要从以下几点调整:
- 批量写入替代单条追加:攒够一定量数据(比如100条或固定时间间隔)后,再一次性写入,大幅减少文件IO次数。
- 更换高效写入库:放弃Pandas默认的
openpyxl/xlwt,改用xlsxwriter配合Pandas;如果允许,优先用csv格式存储(速度比Excel快数倍,后续可批量转Excel);必须用Excel的话,试试pyexcelerate,写入效率远超常规库。 - 保持文件对象持续打开:不要每次写入都重新打开/关闭Excel文件,保持对象打开状态,批量写入后只做一次保存。
三、串口读取环节优化
- 设置合理超时参数:比如
timeout=0.01,避免读取线程在等待数据时长时间阻塞,提升响应速度。 - 批量读取串口数据:用
ser.read(ser.in_waiting)一次性读取串口缓冲区所有可用数据,减少系统调用次数,不要逐字节读取。 - 解析逻辑前置:把数据解析工作放到读取线程中完成,不要让写入线程承担解析开销,进一步拆分任务。
四、其他细节优化
- 移除pyperclip依赖:这个库是用于剪贴板操作的,完全不适合串口数据传输,只会增加额外开销,直接用
pyserial操作串口即可。 - 简化数据存储逻辑:如果不需要Pandas的数据分析功能,直接用原生Python列表配合
csv模块写入,比Pandas的开销更低。 - 硬件适配优化:如果是USB转COM口,使用带独立芯片的高质量适配器,避免USB带宽不足导致的延迟;确保笔记本USB端口为3.0及以上,保证供电稳定。
内容的提问来源于stack exchange,提问作者dfsdf
相关产品推荐
相关产品推荐

