我创建了一个脚本来监视串行端口的输出,该串行端口每半小时接收 3-4 行数据 - 该脚本运行良好并抓取来自端口的所有内容,这在一天结束时才是重要的。 。

然而,令我烦恼的是,对于一个仅监视单个串行端口的程序来说,CPU 使用率似乎相当高,当该脚本运行时,1 个核心将始终处于 100% 使用率。

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

我尝试过定期轮询 inWaiting() 函数,并在 inWaiting() 为 0 时让它休眠 - 我尝试过从 1 秒到 0.001 秒的间隔(基本上,在不增加 CPU 使用率的情况下尽可能频繁地使用) ) - 这将成功获取第一行,但似乎会错过其余的数据。

调整串口的超时似乎对CPU使用率没有任何影响,将监听函数放入它自己的线程中也没有任何影响(并不是我真的期望有什么不同,但值得尝试)。

  • python/pyserial 应该使用这么多的 cpu 吗?(这似乎有点矫枉过正)
  • 我是否在这个任务上浪费了时间/我是否应该硬着头皮安排脚本在我知道不会有数据到来的时间段内休眠?
有帮助吗?

解决方案

也许你可以发出阻止 read(1) 调用,当成功时使用 read(inWaiting()) 以获得正确的剩余字节数。

其他提示

系统风格的解决方案会更好吗?创建 python 脚本并通过 Cron/计划任务 执行它?

pySerial 不应该使用那么多的 CPU,但如果它只是坐在那里轮询一个小时,我可以看到它是如何发生的。结合定期唤醒和轮询,睡眠可能是更好的选择。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top