一定の間隔でデータを読み取るプロセスを開発する。データの読み取りにかかる時間は、ネットワークによって異なります。これは簡単だと思いましたが、一貫したタイミングを得ることができません。ネットワーク速度の変動にうまく対応する、より一貫した安定したシステムを探しています。
現在、私は次のモデルを使用しています
|<--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()はどのくらい正確ですか?