高效,快速的Python While循环,同时使用睡眠()(Efficient and fast P

2019-07-29 18:50发布

我试图用Pyserial通过串行设备进行通信。 由于命令需要不断发送,必须将它们放置在Python中的while循环。

我目前使用此代码,并采取一看蟒蛇过程需要100%的CPU :

while True:
    #do some serial sending here
    time.sleep(0.2)

此代码的工作。 然而,发送速度慢。 我试图使它通过降低更快sleep间隔,但似乎加载CPU有点过分。

总之,有没有什么办法可以有效地遍历一个while循环永远,同时仍保持CPU资源消耗低?

Answer 1:

缓慢的CPU消耗的部分是“做串行发送”。 只有很短的睡眠while循环将使用可忽略不计的CPU。

你能告诉串口发送代码。 有可能是一个方法,以加快这件事。

在这个相当缓慢的CPU我看到这一点:

import time
while True: time.sleep(0.2)      # 0% CPU
while True: time.sleep(0.02)     # 0% CPU
while True: time.sleep(0.002)    # 0.5% CPU
while True: time.sleep(0.0002)   # 6% CPU
while True: time.sleep(0.00002)  # 18% CPU

现在做的环一些额外的工作:

import time
while True: range(10000) and None; time.sleep(0.2)      # 1% CPU
while True: range(10000) and None; time.sleep(0.02)     # 15% CPU
while True: range(10000) and None; time.sleep(0.002)    # 60% CPU
while True: range(10000) and None; time.sleep(0.0002)   # 86% CPU

我跑那些在解释器和停止使用Ctrl-C每个while循环。



Answer 2:

在关于对勒夫的回答您的评论:

然后,微控制器的代码需要重新设计。 否则,你只是把你的通用计算机变成什么比一个愚蠢的“微控制器”反复遍历不必要的代码,因此100%的CPU多。 使用电脑的另一个症状是不正确的,你的硬件电机的速度取决于在你通过串口发送命令给它的速度的事实。 你需要“命令”它,这将承载您的高层次的逻辑计算机。 和你的微控制器需要处理低级别时,电机的控制但却难免重复。



Answer 3:

你要搞清楚你愿意速度和CPU负载之间有权衡。

如果你要发送的数据的短脉冲,而不是做信息之间那么多,那么也许你可以以高CPU负载过一小段时间的平均值仍可能不足。



文章来源: Efficient and fast Python While loop while using sleep()