Skip to main content
 首页 » 编程设计

python之如何在 while 循环中构造此计时代码以更快地运行

2025年05月04日10artech

下面的代码非常通用。在最终状态下,它将运行一些操作(例如从串行流中采样数据),但我现在的目标是优化循环结构以尽可能快地运行。

目前,在触发 if 语句之前,我获得的最大频率约为 100-140。

有没有更有效的方法来运行它?

注意:我知道 while 循环本质上是空的。当然,它运行速度的限制因素将是我在其中调用的函数。我要确保的是 while 循环中的代码尽可能高效地运行

import time 
frequency = float(raw_input("enter sampling frequency in Hz: ")) 
 
zero_time=time.time() 
i=0 
 
try: 
    while True: 
        sample_start_time=time.time() 
        print 'sample',i, 'taken at', sample_start_time-zero_time 
        i+=1 
        sample_end_time=time.time() 
        if 1/frequency-(sample_end_time-sample_start_time)<0: 
            print "sampling frequency is too large...closing" 
            break 
        time.sleep(1/frequency-(sample_end_time-sample_start_time)) 
except KeyboardInterrupt: 
    pass 

请您参考如下方法:

正如评论所说,这个问题对于一个空循环来说有点毫无意义,但这里有一些可能会有所帮助的事情(大致按重要性递增排序)。

  1. 从循环中删除 print 语句。这可能是您目前正在做的最昂贵的事情。
  2. 调查替代计时器。 time.time 和 time.sleep 可能无法提供最佳性能,timeit 模块有一些替代方案。
  3. 提前计算定时器的周期,而不是重复执行 1/frequency。
  4. 只计算一次时间差(以及该差与周期之间的差),而不是每个循环计算两次。

即使您不想测试您的实际工作案例,您也可能想在循环中调用一个空函数,这样您就可以看到函数调用开销有多少。它可能比我上面列表中的 3 和 4 花费更多的时间。