0

开发一个应该以一致的时间间隔读取数据的过程。读取数据的时间段因网络而异。我认为这应该很简单,但我永远无法获得一致的时间安排。寻找一个更一致和稳定的系统,可以很好地响应网络速度的变化。

目前我正在使用以下模型

|<--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()有多准确?

4

0 回答 0