Frage

Wie Sched ich einen Wiederholungszeitgeber für 5-Minuten-Intervallen. Welche das Feuer auf 00 Sekunden, wiederholen Sie dann auf 00. Ok, nicht harte Echtzeit, aber so nah wie möglich mit sys Lags. Der Versuch, einen Aufbau in Lags zu vermeiden und erhält in der Nähe von 00.

Lang: Python, OS: WinXP x64

System hat 25ms Auflösung.

Jeder Code wäre hilfreich, tia

War es hilfreich?

Lösung

Ich weiß nicht, wie es geht nicht mehr genauer als mit Threading .Timer . Es ist „One-Shot“, aber das bedeutet nur die Funktion, die Sie auf diese Weise planen sofort muss sich später für weitere 300 Sekunden neu planen, als erstes. (Sie können Ihre Genauigkeit hinzufügen, indem Sie die genaue Zeit mit time.time jedes Mal Messen und Verändern der nächsten Planungsverzögerung entsprechend).

Andere Tipps

Versuchen Sie, und die Zeit Ausdrucke dieser beiden Codebeispiele vergleichen:

Codebeispiel 1

import time
delay = 5

while True:
    now = time.time()
    print time.strftime("%H:%M:%S", time.localtime(now))

    # As you will observe, this will take about 2 seconds,
    # making the loop iterate every 5 + 2 seconds or so.
    ## repeat 5000 times
    for i in range(5000):
        sum(range(10000))

    # This will sleep for 5 more seconds
    time.sleep(delay)

Code-Beispiel 2

import time
delay = 5

while True:
    now = time.time()
    print time.strftime("%H:%M:%S", time.localtime(now))

    # As you will observe, this will take about 2 seconds,
    # but the loop will iterate every 5 seconds because code 
    # execution time was accounted for.
    ## repeat 5000 times
    for i in range(5000):
        sum(range(10000))

    # This will sleep for as long as it takes to get to the
    # next 5-second mark
    time.sleep(delay - (time.time() - now))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top