2017-01-02 1 views
2

Je dois compter le nombre de secondes écoulées entre l'exécution d'un code sur un Raspberry Pi. Normalement, je ferais comme suit en Python:Mesurer le temps avec Python lorsque le temps de l'unité n'est pas fiable

start = time.time() 
execute_my_function() 
end = time.time() 
elapsed = end - start 

Cependant, le Raspberry Pi ne comprend pas RTC et repose plutôt sur NTP. Cela signifie que pour la première fois après le démarrage, l'heure du système est le 1er janvier 1970, et donc la différence entre «fin» et «début» devient souvent d'environ 47 ans. Comment puis-je mesurer le temps écoulé en secondes si l'heure du système n'est pas fiable (d'après ce que je peux comprendre, le module "timeit" repose sur "time" et ne fonctionnera donc pas non plus)? Il ne doit pas être complètement exact - une seconde ou deux de trop ou trop peu est bien. Edit: J'ai fait une sorte de hack où je lis/proc/uptime qui, je crois, est indépendant du temps système, mais je me sens un peu sale de cette façon. J'espère qu'il y a une solution moins dépendante du système d'exploitation.

+0

Probablement vous pouvez attendre jusqu'à ce que la synchronisation NTP est terminée avant que votre code commence à courir. Je ne sais pas comment vous pouvez faire cela, mais il pourrait y avoir un moyen. Et une manière sale attend dans une boucle retardée jusqu'à ce que le temps ne soit pas égal à Jan 1, 1970 –

+0

Avez-vous besoin de démarrer le programme tout de suite après le démarrage? Pouvez-vous mettre une dépendance sur NTP? En utilisant 'systemd' ou similaire? Vous pouvez spécifier NTP comme dépendance. – Raito

+0

Je ne peux pas compter sur NTP, malheureusement. Le système est destiné à fonctionner même s'il est hors ligne de temps en temps, y compris au démarrage. –

Répondre

0

Vous pourriez avoir votre attente de programme jusqu'à ce que start_time a une valeur significative:

while time.time() < 1e6: 
    time.sleep(10)