0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonで定周期実行

Posted at

Pythonで定周期で誤差を少なく処理したい(シンプルなのが好き)

定周期処理の仕方はいろいろある中で、できるだけ正確にシンプルな方法で機種依存なくできる方法を考える

たどり着いた方法

実行開始時間をベースに経過時間を定周期間隔で割った余りをスリープすることにしました
(python3.3以降)

import time

def TimeSpan(interval):
    BaseTime = time.perf_counter()

    while True:
        # 任意の処理

        now = time.perf_counter()
        ET = now - BaseTime
        rem = ET % interval
        time.sleep(interval - rem)

# 1秒周期
TimeSpan(1)

ばらつき具合

1秒周期で1000回実行したときのばらつき
Figure_processtime.png

まとめ

Python3.3以降のtime.pref_counter()を使いました 3.3より前のバージョンのtime.time()より精度がいいらしいです
いずれにしろWindowsとUnix系で精度が違うのと、他のプロセスの影響も受けるため精度が必要な場合は注意が必要です

参考にした記事

Pythonで定周期で実行する方法と検証

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?