2

Pythonで正確に特定の時点で関数を呼び出す方法は?

例えば:

import time
def foo():
    print time.time()

start_time = time.time()
expected_time_to_run_foo = start_time + 12.3456
#invoke foo

foo関数に指定された値を出力させる方法はexpected_time_to_run_foo?

PS:time.sleep()動作するかどうかはわかりません。もっと精度が必要です。

4

1 に答える 1

2

組み込みの sched モジュールを使用すると、将来のイベントをスケジュールできます。(ここのコードはすべて Python 3 です)。

import sched
import time

def print_something(x):
    print(x)

s = sched.scheduler()

s.enter(1, 0, print_something, ['first'])
s.enter(2, 0, print_something, ['second'])
s.run()

現在の時刻を取得し、将来の指定された時刻まで待機する独自の関数を提供できます。デフォルトは time.monotonic (time.time の微調整バージョン) と time.sleep です。

次のように、busy-wait を使用して精度をわずかに向上させることができます。

import sched
import time

def print_something(x):
    print(x)

def busy_wait(target):
    while time.monotonic() < target:
        pass

s = sched.scheduler(delayfunc=busy_wait)

s.enter(1, 0, print_something, ['first'])
s.enter(2, 0, print_something, ['second'])
s.run()

しかし、現実的には、デスクトップ OS には予期しない遅延の原因が非常に多いため、タイミングの制約がそれほど厳しい場合、リアルタイム OS なしでは許容できる結果を得ることはできません。

于 2013-05-27T13:37:04.810 に答える