Python/PySerial与CPU使用

Python/PySerial与CPU使用,python,cpu-usage,pyserial,Python,Cpu Usage,Pyserial,我创建了一个脚本来监视串行端口的输出,该端口每半小时接收3-4行数据-脚本运行良好,并捕获端口上的所有数据,这在一天结束时才是重要的 然而,让我头疼的是,对于一个只监视一个串行端口的程序来说,cpu的使用率似乎相当高,当这个脚本运行时,1个内核的使用率总是100% 在这个问题上,我基本上是在运行一个修改版本的代码: 我尝试过定期轮询inWaiting()函数,并在inWaiting()为0时让它休眠-我尝试过从1秒到0.001秒的间隔(基本上,在不增加cpu使用率的情况下尽可能频繁)-这将成功捕

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

然而,让我头疼的是,对于一个只监视一个串行端口的程序来说,cpu的使用率似乎相当高,当这个脚本运行时,1个内核的使用率总是100%

在这个问题上,我基本上是在运行一个修改版本的代码:

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

调整串行端口的超时似乎对cpu的使用没有任何影响,将侦听功能放入它自己的线程也没有任何影响(这并不是我真的期望有所不同,但值得一试)

  • python/pyserial应该使用这么多cpu吗?(这似乎太过分了)
  • 我是否在这项任务上浪费时间/我是否应该咬紧牙关,将脚本安排在我知道不会有数据出现的时间段睡觉

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


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

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

如果从cron或sleep运行,您将错过串行输出。程序必须以守护进程或活动进程的形式运行。我很欣赏Lobster的建议,但jmanning2k有权这样做-这是一个类似守护进程的进程。我们将每半小时获取一次数据,但这是最精确的。cron/计划任务方法必须在工作时间上非常精确,最小的干扰将导致数据丢失。那根本不行,太棒了!它现在像小猫一样发出呼噜声,几乎没有CPU使用,它抓住了我扔给它的所有东西。我使用read(inWaiting())的印象是,它的功能与read(1)相同——显然不是这样。谢谢你帮我清理了。很酷,谢谢你让我发现PySoCy,下次我会用串口来考虑:)安装和使用都是非常好的,这是我唯一遇到的问题,也是我的问题。好的方法,我把它带到另一个级别,因为我既抽象了PySym,又提取了socket。我相当肯定,我可以得到同样的方法来减少cpu的使用,知道它在哪里被占用。