now - Obtenez le temps POSIX/Unix en secondes et les nanosecondes en Python?




time python 3 (4)

Cela dépend du type d'horloge et de votre système d'exploitation et de votre matériel, que vous obteniez ou non une précision à la nanoseconde. De la documentation du module d' time :

La précision des différentes fonctions en temps réel peut être inférieure à celle suggérée par les unités dans lesquelles leur valeur ou leur argument est exprimé. Par exemple, sur la plupart des systèmes Unix, l’horloge ne coche que 50 ou 100 fois par seconde.

Sur Python 3, le module de time vous donne accès à 5 types d'horloge, chacun ayant des propriétés différentes. certains d'entre eux peuvent vous offrir un timing de précision en nanosecondes. Utilisez la fonction time.get_clock_info() pour voir les fonctionnalités offertes par chaque horloge et l'heure de précision indiquée.

Sur mon ordinateur portable OS X 10.11, les fonctionnalités disponibles sont les suivantes:

>>> for name in ('clock', 'monotonic', 'perf_counter', 'process_time', 'time'):
...     print(name, time.get_clock_info(name), sep=': ')
...
clock: namespace(adjustable=False, implementation='clock()', monotonic=True, resolution=1e-06)
monotonic: namespace(adjustable=False, implementation='mach_absolute_time()', monotonic=True, resolution=1e-09)
perf_counter: namespace(adjustable=False, implementation='mach_absolute_time()', monotonic=True, resolution=1e-09)
process_time: namespace(adjustable=False, implementation='getrusage(RUSAGE_SELF)', monotonic=True, resolution=1e-06)
time: namespace(adjustable=True, implementation='gettimeofday()', monotonic=False, resolution=1e-06)

donc utiliser les fonctions time.monotonic() ou time.perf_counter() me donnerait théoriquement une résolution en nanosecondes. Aucune horloge ne me donne l' heure du mur , seulement le temps écoulé; les valeurs sont autrement arbitraires. Ils sont cependant utiles pour mesurer combien de temps quelque chose a pris.

https://code.i-harness.com

J'ai essayé de trouver un moyen d'obtenir le temps depuis le 01/01/1900 00:00:00 UTC en quelques secondes et des nanosecondes en python et je ne trouve rien qui puisse me donner la précision voulue.

J'ai essayé d'utiliser le module de temps, mais cette précision ne concerne que les microsecondes, donc le code que j'ai essayé était:

import time

print time.time()

ce qui m'a donné un résultat comme celui-ci:

1267918039.01

Cependant, j'ai besoin d'un résultat qui ressemble à ceci:

1267918039.331291406

Est-ce que quelqu'un connaît un moyen possible d'exprimer le temps UNIX en secondes et en nanosecondes? Je ne peux pas trouver un moyen de définir la précision appropriée ou d'obtenir un résultat au format correct. Merci pour toute aide



Je ne pense pas qu'il existe un moyen indépendant de la plate-forme (peut-être qu'un tiers en a codé un, mais je ne le trouve pas) pour obtenir du temps en nanosecondes; vous devez le faire d'une manière spécifique à la plate-forme. Par exemple, la réponse de cette question SO indique comment procéder sur la plate-forme qui fournit une bibliothèque système librt.so pour les opérations "temps réel".


Le problème est probablement lié à votre système d'exploitation, pas à Python. Voir la documentation du module time : http://docs.python.org/library/time.html

time. time()

Renvoie l'heure sous forme de nombre à virgule flottante exprimée en secondes depuis l'époque, en UTC. Notez que même si l'heure est toujours renvoyée sous la forme d'un nombre à virgule flottante, tous les systèmes ne fournissent pas un temps d'une précision supérieure à 1 seconde . Bien que cette fonction retourne normalement des valeurs non décroissantes, elle peut renvoyer une valeur inférieure à celle d'un appel précédent si l'horloge système a été rétablie entre les deux appels.

En d'autres termes: si votre système d'exploitation ne peut pas le faire, Python ne peut pas le faire. Vous pouvez multiplier la valeur de retour par l’ordre de grandeur approprié afin d’obtenir la valeur de la nanoseconde, bien qu’elle soit imprécise.

EDIT: Le retour est une variable flottante, donc le nombre de chiffres après la virgule variera, que votre système d'exploitation ait ce niveau de précision ou non. Vous pouvez le formater avec "%.nf"n est le nombre de chiffres que vous voulez, cependant, si vous voulez une représentation sous forme de chaîne à virgule fixe.





posix