当前位置: 首页 > 面试题库 >

如何确保Python while循环需要特定的时间才能运行?

孔磊
2023-03-14
问题内容

我正在使用while循环读取串行数据。但是,我无法控制采样率。

代码本身似乎需要0.2秒才能运行,所以我知道我将无法以更快的速度运行。但我希望能够精确控制采样速度。

我觉得我可以使用“睡眠”来做到这一点,但是问题是循环有可能在不同的点读取更长的时间(具体取决于通过串行数据传输的内容),因此代码应该具有弥补余额。

例如,假设我想每1秒采样一次,那么循环就需要0.2s至0.3s的任意时间来运行。我的代码必须足够聪明,可以睡0.8秒(如果循环需要0.2秒)或0.7秒(如果循环需要0.3秒)。

import serial
import csv
import time

#open serial stream
    while True:

        #read and print a line
        sample_value=ser.readline()
        sample_time=time.time()-zero
        sample_line=str(sample_time)+','+str(sample_value)
        outfile.write(sample_line)
        print 'time: ',sample_time,', value: ',sample_value

问题答案:

只需测量运行代码所需的时间即可完成循环的每个迭代,并sleep相应地:

import time

while True:
    now = time.time()            # get the time
    do_something()               # do your stuff
    elapsed = time.time() - now  # how long was it running?
    time.sleep(1.-elapsed)       # sleep accordingly so the full iteration takes 1 second

当然不是100%完美的(可能不时关闭一毫秒或另一毫秒),但是我想这已经足够了。

另一种不错的方法是使用twisted的LoopingCall

from twisted.internet import task
from twisted.internet import reactor

def do_something():
    pass # do your work here

task.LoopingCall(do_something).start(1.0)
reactor.run()


 类似资料:
  • 我是分析时间的新手complexity.some有人能帮我解决下面算法的时间复杂度吗? 外部循环将运行日志(n)次。内部循环将运行多少次。我们如何用“n”来计算内环的频率,因为它取决于变量“i”。 有人能帮忙找出上面代码的时间复杂度吗。

  • 问题内容: 我正在使用Hibernate 4.2,JPA 2.0和Postgres 9.2 代码卡在 在进一步调查中,我发现Hibernate调用了class 方法。此方法尝试加载有关每个数据库对象的元数据 的代码是Postgers的JDBC驱动程序的一部分,而确实是花费时间来执行该方法的驱动程序(我加载了驱动程序源并尝试了跟踪)。但是由于这个问题在Hibernate 3.3(我之前使用过)中没有

  • 问题内容: 有没有办法知道在Java中执行一个循环要花多少秒? 例如: 它不必精确到100%,而只是想知道要花费多长时间。里面的算法是一种写入.txt文件的密钥生成器。我希望它花费几分钟,因此对于我的第一次测试,我想计算秒数。 问题答案: 用Java编写微基准测试时需要非常小心。例如: 如果JIT编译器可以弄清楚循环体不影响代码结果,则可以对其进行优化。例如: 可能很快就会“运行”。 JIT编译后

  • 问题内容: 我有以下声明: 我需要为role_id 101-355生成一行(因此,与上述相同的语句,除了随着role_id递增而重复)。最好的方法是什么?为了完成这项工作,我打算编写一个快速的C#应用​​程序,该应用程序将有一个循环,但是我确信这不是最好的方法,希望在这里学习一些东西,以免将来不得不这样做(因为我确保这种情况很常见)。 问题答案: 您应该使用数字表,如果没有数字表,可以这样使用:

  • 问题内容: 基本上,我正在制作一款可以更新玩家位置的游戏,它使用以下线程: 效果很好,但是如果我删除System.out.println(),它将停止运行。我不知道为什么会这样,整个班级如下: 最后说明:传入布尔值upPresses和downPressed,我唯一要关注的是: 问题答案: 像这样的循环 会完全占用CPU。它开始表现更好的原因可能是因为您为I / O每次迭代产生了数百个周期。 我建议

  • 问题内容: 我目前有一个正常工作的解析器。它解析一次文件(不是我想要的功能),然后将解析的数据输出到文件中。我需要它来继续解析并追加到相同的输出文件,直到输入文件的末尾。看起来像这样。 除了while循环,其他所有操作都已完成。当我需要它继续解析时,它只会解析一次。我正在寻找一个while循环函数来达到eof。 我也在使用DataInputStream。是否有某种DataInputStream.h

  • 给定打印字母a-C的三个线程1-3,如何保证输出顺序? 我希望线程的输出是“abcabc”

  • 我一直在检查重叠时间。我的日历实现允许循环或环绕时间(因此在结束时间之后有开始时间是可能的) 例如:,, 我在网上找到的一些答案,当结束时间严格地晚于开始时间时起作用。我该怎么解决这个?我正在使用这个StackOverflow解决方案,但它不能完全工作:确定两个日期范围是否重叠 在这张图片中,两个时间范围重叠,但我的植入没有正确地识别它:重叠的时间 这里是调试输出,它应该返回True,但不是:de