开发一个应该以一致的时间间隔读取数据的过程。读取数据的时间段因网络而异。我认为这应该很简单,但我永远无法获得一致的时间安排。寻找一个更一致和稳定的系统,可以很好地响应网络速度的变化。
目前我正在使用以下模型
|<--read data-->|<--post process-->|<--sleep x seconds to maintain period-->|
|<------------------------------known data rate---------------------------->|
我的代码做了类似的事情
data_rate = 5 # Hz
while 1:
# read in data
rd_start = time.time()
data = getdata()
rd_stop = time.time()
# Post processing
pp_start = time.time()
rate = 1.0/(rd_start - oldstart) if oldstart else data_rate
old_start = rd_start
print rate
post_process(data)
pp_stop = time.time()
sleep_time = 1.0/data_rate - ((rd_stop-rd_start) + (pp_stop-pp_start))
sleep_time = sleep_time if sleep_time>0 else 0
time.sleep(sleep_time)
如果网络无法满足该速度(睡眠时间始终为负数)但工作正常,我还有一些逻辑可以更改更新速率(data_rate)。
出于某种原因,我的数据速率从来都不是一致的(当它稳定时以大约 4.92 Hz 的速度运行)。这种方法也很不稳定。这样做的更好方法是什么?想到 Threading.Timers()?
频率的一致偏移是否是由 time.sleep() 的错误引起的? python的time.sleep()有多准确?