代码之家  ›  专栏  ›  技术社区  ›  Crazy Joe Malloy

python/pyserial和CPU使用率

  •  13
  • Crazy Joe Malloy  · 技术社区  · 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吗?(这似乎太过分了)
    • 我是在浪费时间去做这个任务吗?我应该咬紧牙关,把脚本安排在我知道没有数据的时间段内睡觉吗?
    2 回复  |  直到 15 年前
        1
  •  14
  •   tonfa    15 年前

    也许你可以发布一个拦截 read(1) 调用,并在成功时使用 read(inWaiting()) 以获得正确的剩余字节数。

        2
  •  0
  •   BobBrez    15 年前

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

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