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