Python/PySerial 和 CPU 使用率

15 投票
2 回答
5686 浏览
提问于 2025-04-15 13:51

我写了一个脚本,用来监控一个串口的输出,这个串口每半小时会收到3到4行数据。这个脚本运行得很好,能把从串口接收到的所有数据都抓到,这才是最重要的……

不过,有一点让我烦恼,那就是这个程序的CPU使用率似乎有点高。运行这个脚本的时候,有一个核心的使用率总是达到100%。

我基本上是在运行这个问题中的代码的修改版本:pyserial - 如何读取串口设备发送的最后一行

我尝试定期调用inWaiting()函数,并在inWaiting()为0时让它休眠。我试过从1秒到0.001秒的不同时间间隔(基本上就是尽量频繁地调用,而不让CPU使用率飙升)——这样可以成功抓到第一行,但似乎会漏掉后面的数据。

调整串口的超时时间似乎对CPU使用率没有任何影响,把监听功能放到自己的线程里也没有改变(虽然我本来就没指望会有不同,但试试看也是值得的)。

  • Python/pyserial真的需要这么高的CPU使用率吗?(这看起来有点过了)
  • 我是在浪费时间吗?还是应该干脆让脚本在我知道不会有数据来的时候休眠?

2 个回答

0

用系统的方式来解决这个问题会不会更好呢?可以创建一个Python脚本,然后通过Cron(定时任务)来执行它?

pySerial这个东西其实不应该占用那么多CPU资源,不过如果它只是一直在那儿等待一个小时,我能理解为什么会这样。让它休眠可能是个更好的选择,配合定时唤醒和检查。

16

你可以尝试先发出一个阻塞的 read(1) 调用,这样程序会等待直到有数据可读。等这个调用成功后,再用 read(inWaiting()) 来读取剩下的所有数据,这样就能获取到正确数量的字节了。

撰写回答