毎分、つまり 00 秒でトリガーしたい関数があります。壁に取り付けられるダム ディスプレイに無線でパケットを送信します。
while ループで総当たりできることはわかっていますが、それは少し厳しいようです。
sched を使用してみましたが、1分ごとに1秒追加されます。
私のオプションは何ですか?
Python 用の cron スタイルのスケジューラ モジュールであるAPSchedulerを試すことができます。
彼らの例から:
from apscheduler.scheduler import Scheduler
# Start the scheduler
sched = Scheduler()
sched.start()
def job_function():
print "Hello World"
sched.add_cron_job(job_function, second=0)
job_function
毎分実行されます。
コードの実行にかかった時間を測定し、それをスリープ時間の 60 から差し引いたらどうなるでしょうか?
import time
while True:
timeBegin = time.time()
CODE(.....)
timeEnd = time.time()
timeElapsed = timeEnd - timeBegin
time.sleep(60-timeElapsed)
最も簡単な解決策は、タイムアウトをオペレーティング システムに登録して、必要なときに期限切れになるようにすることです。
現在、ブロッキング命令を使用してこれを行う方法は多数あり、最適なオプションは実装によって異なります。最も簡単な方法は、次を使用することtime.sleep()
です。
import time
current_time = time.time()
time_to_sleep = 60 - (current_time % 60)
time.sleep(time_to_sleep)
このようにして、現在の時間を取り、睡眠に必要な時間を秒単位で計算します。ミリ秒の精度ではありませんが、十分に近いです。
Threading.Timerを試すことができます
この例を参照してください
from threading import Timer
def job_function():
Timer(60, job_function).start ()
print("Running job_funtion")
「Running job_function」を毎分出力します
編集:実行する時間について重要な場合
from threading import Timer
from time import time
def job_function():
Timer(int(time()/60)*60+60 - time(), job_function).start ()
print("Running job_funtion")
毎分の 0 秒に正確に実行されます。
Python time モジュールは、通常、このようなイベントに使用するものです。と呼ばれるメソッドがあります。sleep(t)
ここでt
、遅延したい秒数に等しくなります。
ループと組み合わせると、while
探しているものを取得できます。
import time
while condition:
time.sleep(60)
f(x)
whileループとスリープを使用して、プロセッサを使いすぎないようにすることができます