15

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

然而,让我感到困扰的是,对于只监视单个串行端口的程序来说,cpu 使用率似乎相当高,当这个脚本运行时,1 个内核将始终处于 100% 的使用率。

我基本上在这个问题中运行代码的修改版本:pyserial - How to Read Last Line Sent from Serial Device

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

调整串口的超时时间似乎对 cpu 的使用没有任何影响,将监听功能放到它自己的线程中也没有(不是我真的期望有区别,但值得一试)。

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

2 回答 2

16

也许您可以发出一个阻塞read(1)调用,并在它成功时使用read(inWaiting())来获取正确数量的剩余字节。

于 2009-08-25T14:31:57.003 回答
0

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

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

于 2009-08-25T14:25:48.980 回答