5

毎分、つまり 00 秒でトリガーしたい関数があります。壁に取り付けられるダム ディスプレイに無線でパケットを送信します。

while ループで総当たりできることはわかっていますが、それは少し厳しいようです。

sched を使用してみましたが、1分ごとに1秒追加されます。

私のオプションは何ですか?

4

8 に答える 8

7

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毎分実行されます。

于 2013-10-28T21:52:07.747 に答える
5

コードの実行にかかった時間を測定し、それをスリープ時間の 60 から差し引いたらどうなるでしょうか?

import time

while True:
    timeBegin = time.time()

    CODE(.....)

    timeEnd = time.time()
    timeElapsed = timeEnd - timeBegin
    time.sleep(60-timeElapsed)
于 2013-12-04T09:27:30.210 に答える
4

最も簡単な解決策は、タイムアウトをオペレーティング システムに登録して、必要なときに期限切れになるようにすることです。

現在、ブロッキング命令を使用してこれを行う方法は多数あり、最適なオプションは実装によって異なります。最も簡単な方法は、次を使用することtime.sleep()です。

import time

current_time = time.time()
time_to_sleep = 60 - (current_time % 60)
time.sleep(time_to_sleep)

このようにして、現在の時間を取り、睡眠に必要な時間を秒単位で計算します。ミリ秒の精度ではありませんが、十分に近いです。

于 2013-10-28T21:56:18.670 に答える
2

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 秒に正確に実行されます。

于 2016-02-19T03:10:40.740 に答える
0

Python time モジュールは、通常、このようなイベントに使用するものです。と呼ばれるメソッドがあります。sleep(t)ここでt、遅延したい秒数に等しくなります。

ループと組み合わせると、while探しているものを取得できます。

import time

while condition:
    time.sleep(60)
    f(x)
于 2013-10-28T21:56:30.903 に答える
-1

whileループとスリープを使用して、プロセッサを使いすぎないようにすることができます

于 2013-10-28T21:53:28.390 に答える