开发一个应该以一致的间隔读取数据的进程。读取数据的时间段因网络而异。我认为这应该是直截了当的,但我永远无法获得一致的时机。寻找更加一致和稳定的系统,以便对网络速度变化做出良好响应。
目前我正在使用
之后的模型|<--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()的错误引起? How accurate is python's time.sleep()?