2016-06-08 18 views
0

Ausgabe Springen: Wenn die Funktion time.time() aufrufen ich es bemerken etwa 30 Sekunden nach dem Neustart zu springen. Durch den Sprung ich meine es ändert seinen Rückgabewert von etwa 40 Sekunden sofort.time.time (Werte)

Setup: ich mein Skript auf einem Raspberry Pi 3B, immeadiately nach dem Neustart leite. Das Problem tritt nicht auf, wenn es später ausgeführt wird.

Frage: Warum das auftritt? Ich vermute, dass der Raspberry nach einem Neustart über WiFi seine Systemuhr irgendwann ändert. Kann das das Problem sein? Ich glaube nicht, dass das Posten von Code hilfreich ist, da es sich wirklich um eine Frage handelt, die sich auf die Funktion time.time() bezieht.

+0

Also, wenn Sie Ihre eigene Frage beantworten, was macht es, wenn Sie WiFi deaktivieren? – Brian

Antwort

2

Viele Betriebssysteme aktualisieren ihre Uhr beim Booten. time.time() gibt die Zeit seit Epoch zurück, wenn sich also die Uhr ändert, ändert sich auch das Delta zwischen jetzt und Epoch.

Sie können den monotonen Timer verwenden, wenn Sie diese Sprünge vermeiden möchten. Python 3.3 eingeführt time.monotonic(), überprüfen Sie es. Aus der Dokumentation:

Geben Sie den Wert (in Sekundenbruchteilen) einer monotonen Uhr zurück, d. H. Eine Uhr, die nicht rückwärts gehen kann. Die Uhr wird von Systemaktualisierungen nicht beeinflusst. Der Bezugspunkt des zurückgegebenen Wertes ist nicht definiert, so dass nur die Differenz zwischen den Ergebnissen aufeinander folgender Aufrufe gültig ist.

Für Python < 3.3 gibt es auch die monotonic third party package.

0

Prüfen, ob die Uhr von externer Quelle wie NPT eingestellt wird.

2

Dies ist wahrscheinlich, weil der Raspberry Pi keine Echtzeituhr hat. Ich würde stattdessen empfehlen, dass Sie monoton verwenden. Dies sollte Ihnen eine konsistente Ausgabe ermöglichen, unabhängig davon, ob sich die Systemuhr ändert.

Die Bibliothek, die ich normalerweise verwende, ist here verfügbar und unterstützt sowohl Python 2.7 als auch Python 3.X.

Verwandte Themen