Comment puis-je obtenir des durées de temps monotones en python?



time timezone python (4)

Comme indiqué dans cette question , éviter les réajustements NTP sous Linux nécessite CLOCK_MONOTONIC_RAW. C'est défini comme 4 sur Linux (depuis 2.6.28).

Obtenir la bonne constante #defined dans un en-tête C à partir de Python est difficile; il y a h2py, mais cela ne vous aide pas vraiment à obtenir la valeur à l'exécution.

Je veux enregistrer combien de temps quelque chose prend en temps réel. Actuellement je fais ceci:

startTime = time.time()
someSQLOrSomething()
print "That took %.3f seconds" % (time.time() - startTime)

Mais cela échouera (produira des résultats incorrects) si l'heure est ajustée pendant que la requête SQL (ou quoi que ce soit) est en cours d'exécution.

Je ne veux pas seulement l'évaluer. Je veux l'enregistrer dans une application en direct afin de voir les tendances sur un système en direct.

Je veux quelque chose comme clock_gettime (CLOCK_MONOTONIC, ...), mais en Python. Et de préférence sans avoir à écrire un module C qui appelle clock_gettime ().



time.monotonic() peut être utile:

Renvoie la valeur (en secondes fractionnaires) d'une horloge monotone, c'est-à-dire une horloge qui ne peut pas revenir en arrière. L'horloge n'est pas affectée par les mises à jour de l'horloge système. Le point de référence de la valeur renvoyée est indéfini, de sorte que seule la différence entre les résultats des appels consécutifs est valide.


Voici comment je reçois du temps monotone dans Python 2.7:

Installez le paquet monotonic :

pip install monotonic

Puis en Python:

import monotonic; mtime = monotonic.time.time #now mtime() can be used in place of time.time()

t0 = mtime()
#...do something
elapsed = mtime()-t0 #gives correct elapsed time, even if system clock changed.




clock