Mesure le temps écoulé avec le module d'
Avec le module en python est-il possible de mesurer le temps écoulé? Si oui, comment dois-je faire?
J'ai besoin pour ce faire de sorte que si le curseur a été dans un widget pour une certaine durée, un événement se produit.
- N. B. que toute réponse à l'aide de
time.time()
est incorrect. L'exemple le plus simple est de savoir si l'heure du système est modifiée au cours de la période de mesure. - Pour votre première question concernant la cuisson d'un événement si un curseur reste pour une certaine durée sur un widget, docs.python.org/3/library/threading.html offre tout ce que vous devez, je pense. Le Multithreading et une variable de condition avec délai d'attente pourrait être une des solutions. Votre cas, cependant, sont actuellement difficile de répondre.
- Il n'y a pas de raison que n'importe qui devrait être à l'aide de
time.time()
pour mesurer le temps écoulé moderne python (touchés par les modifications manuelles, la dérive, les secondes intercalaires, etc). Cette réponse ci-dessous doit être plus élevé, compte tenu de cette question est maintenant de meilleurs résultats dans Google pour mesurer le temps écoulé. - Vous pouvez mesurer le temps avec le cProfile profiler ainsi: docs.python.org/3/library/profile.html#module-cProfile stackoverflow.com/questions/582336/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également écrire un texte simple décorateur pour simplifier la mesure des temps d'exécution de diverses fonctions:
Utilisation:
Vous pouvez le profil de plus d'une fonction à la fois. Ensuite pour imprimer les mesures il suffit d'appeler le print_prof_data():
pip install profilehooks
, et ses page d'accueiltime.monotonic()
plutôttime.time()
lors de la mesure des délais d'attente ou des durées. docs.python.org/3/library/time.html#time.monotonictime.time()
va faire le travail.Vous pouvez regarder la cette question, mais je ne pense pas qu'il sera nécessaire.
Pour les utilisateurs qui veulent une meilleure mise en forme,
permettra d'imprimer, pour le compte de 2 secondes:
et à 7 minutes en une seconde:
noter que le minimum de l'unité de temps avec gmtime est secondes. Si vous avez besoin de microsecondes de considérer les éléments suivants:
strftime la documentation
e = time.time() - start_time ; print("%02d:%02d:%02d" % (e // 3600, (e % 3600 // 60), (e % 60 // 1)))
qui donne presque la même, ainsi que la couverture de la situation qui s'est écoulé plus de 24 heures.time.monotonic()
comme dans les autres réponses?Pour la meilleure mesure du temps écoulé (depuis Python 3.3), l'utilisation
temps.perf_counter()
.Pour des mesures sur l'ordre des heures/jours, vous n'avez pas de soins sur les sous-deuxième résolution de manière à utiliser
temps.monotone()
à la place.Dans de nombreuses implémentations, ceux-ci peuvent en fait être la même chose.
Avant de 3.3, vous êtes coincé avec
temps.clock()
.Mise à jour pour Python 3.7
Nouveau en Python 3.7 est PEP 564 -- Ajouter de nouvelles fonctions de temps avec une résolution d'une.
Utilisation de celles-ci peut poursuivre l'élimination de l'arrondissement et à virgule flottante erreurs, surtout si vous êtes en mesure de très courtes périodes, ou de votre application (ou d'une machine Windows) est longue.
Résolution commence à se décomposer sur
perf_counter()
après environ 100 jours. Ainsi, par exemple, après une année de disponibilité, l'intervalle le plus court (supérieur à 0), il peut mesurer sera plus grand que quand il a commencé.Vous avez besoin d'importer de temps et puis de temps d'utilisation.time() méthode pour connaître l'heure actuelle.
Pour une plus longue période.
serait d'imprimer
si plus de 24 heures
Qui est inspirée par Rutger Hofste de réponse. Merci Rutger!
Vadim Shender réponse est grande. Vous pouvez également utiliser un simple décorateur, comme ci-dessous:
Une autre belle façon de le temps des choses est d'utiliser le avec python structure.
avec structure est automatiquement appel __enter__ et __exit__ méthodes qui est exactement ce que nous avons besoin de temps de les choses.
Nous allons créer un Minuterie classe.
Ensuite, on peut utiliser la classe Timer comme ceci:
Le résultat est le suivant:
Nombres premiers: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67,
71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239,
241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337,
347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433,
439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499]
Temps écoulé pour calculer certains nombres premiers: 5.01704216003418 ms
Ici est une mise à jour de Vadim Shender malin de code avec des tableaux de sortie: