gpt4 book ai didi

python - 我如何确保 Python while 循环需要特定的时间来运行?

转载 作者:太空狗 更新时间:2023-10-30 00:30:16 26 4
gpt4 key购买 nike

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

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

我觉得我可以使用“ sleep ”来做到这一点,但问题是在不同的点上循环本身可能需要更长的时间来读取(具体取决于通过串行数据传输的内容),所以代码必须弥补余额。

例如,假设我想每 1 秒采样一次,循环需要 0.2 秒到 0.3 秒的时间运行。我的代码需要足够智能以休眠 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

最佳答案

只需测量运行代码在循环的每次迭代中花费的时间,并据此休眠:

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% 完美(有时可能会偏离一毫秒或另一毫秒),但我想这已经足够好了。


另一个不错的方法是使用 twistedLoopingCall :

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()

关于python - 我如何确保 Python while 循环需要特定的时间来运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com