Ich habe eine Planungsfunktion und einen Scheduler mit einer Warteschlange von zukünftigen Ereignissen nach Zeit sortiert. Ich verwende UNIX-Zeitstempel und das reguläre time.time()
. Ein Fragment des Planers entspricht in etwa folgendermaßen aus:Planung für eine genaue Zeit mit monotoner Zeit
# select the nearest event (eventfunc at eventime)
sleeptime = eventtime - time.time()
# if the sleep gets interrupted,
# the whole block will be restarted
interruptible_sleep(sleeptime)
eventfunc()
wo die eventtime
berechnet entweder auf einer Verzögerung basieren könnte:
eventtime = time.time() + delay_seconds
oder auf der Grundlage einer genauen Datum und Uhrzeit, zB:
eventtime = datetime(year,month,day,hour,min).timestamp()
Jetzt haben wir die monotone Zeit in Python. Ich überlege, den Scheduler zu ändern, um die monotone Zeit zu verwenden. Scheduler sollen die monotone Zeit, die sie sagen, benutzen.
Kein Problem mit Verzögerungen:
sleeptime = eventtime - time.monotonic()
wo:
eventtime = time.monotonic() + delay_seconds
Aber mit der genauen Zeit denke ich, der beste Weg, um den Code zu lassen, wie es ist. Ist das korrekt?
Wenn ja, würde ich zwei Ereigniswarteschlangen benötigen, eine basierend auf monotoner Zeit und eine basierend auf regulärer Zeit. Ich mag diese Idee nicht besonders.
Sie können sich das ['sched 'Standardmodul] (https://docs.python.org/3/library/sched.html) ansehen. Es ist so konzipiert, dass es unabhängig vom Zeitmanipulations-Backend ist und standardmäßig "time.monotonic" verwendet. –