web-dev-qa-db-fra.com

Comparaison des temps avec une précision inférieure à la seconde

Comment puis-je obtenir le nombre de millisecondes depuis l'époque?

Notez que je veux les millisecondes réelles, pas les secondes multipliées par 1000. Je compare les temps pour des trucs qui prennent moins d'une seconde et nécessitent une précision en millisecondes. (J'ai regardé beaucoup de réponses et elles semblent toutes avoir un * 1000)

Je compare une heure que j'obtiens dans une demande POST à l'heure de fin sur le serveur. J'ai juste besoin que les deux fois soient au même format, quel qu'il soit. J'ai pensé à l'heure unix fonctionnerait puisque Javascript a une fonction pour l'obtenir

35
user984003

time.time() * 1000will vous donne une précision en millisecondes si possible.

29
duskwuff

int(time.time() * 1000) fera ce que vous voulez. time.time() renvoie généralement une valeur flottante avec une précision double comptant les secondes depuis epoche, donc la multiplier ne nuit pas à la précision.

Un autre mot à la réponse trompeuse de @kqr: time.clock() ne vous donne pas l'heure de l'époque. Il vous donne l'heure à laquelle le processus s'est exécuté sur le CPU pour Unix, ou le temps écoulé depuis le premier appel à la fonction sous Windows, voir documents python .

Il est également vrai que la documentation indique que time.time() n'est pas garanti pour vous donner une précision ms. Bien que cette déclaration soit principalement destinée à vous assurer de ne pas vous fier à cette précision sur du matériel embarqué ou préhistorique, et je ne connais aucun exemple où vous n'obtiendrez pas de précision ms.

18
Michael

Utilisation de datetime :

>>> import datetime
>>> delta = datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)
>>> delta
datetime.timedelta(15928, 52912, 55000)
>>> delta.total_seconds()
1376232112.055
>>> delta.days, delta.seconds, delta.microseconds
(15928, 52912, 55000)
14
falsetru

Je vois beaucoup de gens suggérer time.time(). Alors que time.time() est un moyen précis de mesurer l'heure réelle de la journée, il n'est pas garanti de vous donner une précision en millisecondes ! D'après la documentation:

Notez que même si l'heure est toujours renvoyée sous forme de nombre à virgule flottante, tous les systèmes ne fournissent pas l'heure avec une meilleure précision que 1 seconde. Bien que cette fonction renvoie normalement des valeurs non décroissantes, elle peut renvoyer une valeur inférieure à un appel précédent si l'horloge système a été réglée entre les deux appels.

C'est pas la procédure que vous souhaitez lorsque vous comparez deux fois! Cela peut exploser de tant de façons intéressantes sans que vous puissiez dire ce qui s'est passé. En fait, lorsque vous comparez deux fois, vous n'avez pas vraiment besoin de savoir quelle heure il est, seulement que les deux valeurs ont le même point de départ. Pour cela, la bibliothèque time vous propose une autre procédure: time.clock(). La documentation dit:

Sous Unix, renvoyez le temps processeur actuel sous la forme d'un nombre à virgule flottante exprimé en secondes. La précision, et en fait la définition même de la signification du "temps processeur", dépend de celle de la fonction C du même nom, mais en tout cas, c'est la fonction à utiliser pour l'analyse comparative Python ou algorithmes de synchronisation.

Sous Windows, cette fonction renvoie les secondes de l'horloge murale écoulées depuis le premier appel à cette fonction, sous la forme d'un nombre à virgule flottante, basé sur la fonction Win32 QueryPerformanceCounter (). La résolution est généralement meilleure qu'une microseconde .

Utilisez time.clock().


Ou si vous voulez simplement tester la vitesse d'exécution de votre code, vous pouvez le rendre pratique pour vous et utiliser timeit.timeit() qui effectue toutes les mesures pour vous et est de facto méthode standard de mesure du temps écoulé dans l'exécution du code.

14
kqr