J'ai un programme en ligne de commande en Python qui prend un certain temps pour terminer. Je veux savoir le temps exact qu'il faut pour terminer la course.
J'ai regardé le timeit
module, mais il semble que ce ne soit que pour de petits extraits de code. Je veux chronométrer tout le programme.
round(time.time() - start_time, 2)
(ou la décimale que vous voulez), je récupérais des nombres scientifiques comme 1.24e-5.'%.2f'
au lieu d'round()
ici.Je mets ce
timing.py
module dans mon propresite-packages
répertoire, et j'insère justeimport timing
en haut de mon module:Je peux également appeler
timing.log
depuis mon programme s'il y a des étapes importantes dans le programme que je veux montrer. Mais le simple fait d'import timing
imprimer les heures de début et de fin et le temps total écoulé. (Pardonnez masecondsToStr
fonction obscure , il formate juste un nombre à virgule flottante de secondes au format hh: mm: ss.sss.)Remarque: Une version Python 3 du code ci-dessus peut être trouvée ici ou ici .
la source
from functools import reduce
en haut et mettez des crochets autour de chaque instruction d'impression. Fonctionne très bien!Sous Linux ou Unix:
Sous Windows, consultez cette question StackOverflow: comment mesurer le temps d'exécution d'une commande sur la ligne de commande Windows?
Pour une sortie plus détaillée,
la source
secondsToStr()
fonction.J'aime vraiment la réponse de Paul McGuire , mais j'utilise Python 3. Donc pour ceux qui sont intéressés: voici une modification de sa réponse qui fonctionne avec Python 3 sur * nix (j'imagine, sous Windows, qui
clock()
devrait être utilisé à la place detime()
):Si vous trouvez cela utile, vous devriez toujours voter pour sa réponse au lieu de celle-ci, car il a fait la plupart du travail;).
la source
timedelta(seconds=t).total_seconds()
utile.time.clock()
renvoie le temps processeur, ce qui nous permet de calculer uniquement le temps utilisé par ce processus (sous Unix quand même). La documentation indique "dans tous les cas, c'est la fonction à utiliser pour comparer les algorithmes Python ou de synchronisation"la source
J'aime la sortie
datetime
fournie par le module, où les objets delta temporels affichent les jours, les heures, les minutes, etc. selon les besoins d'une manière lisible par l'homme.Par exemple:
Exemple de sortie, par exemple
ou
Comme l'a mentionné JF Sebastian, cette approche peut rencontrer des cas délicats avec l'heure locale, il est donc plus sûr d'utiliser:
la source
timedelta(seconds=time.monotonic()-start)
ici (outime.time()
si l'intervalle est long ). Ne soustrayez pas les objets naïfs datetime qui représentent l'heure locale; l'heure locale n'est pas monotonestart_time = time.monotonic(); end_time = time.monotonic(); timedelta(seconds=end_time - start_time)
. J'espère que vous avez raison, mais vous devez également le formater à votre retourdatetime.timedelta(0, 0, 76)
. De plus, il semble que la méthode monotone n'ait été ajoutée qu'en Python 3.str()
pour le rendre "humain". Je mettrai à jour la réponse, merci.Vous pouvez utiliser le profileur Python cProfile pour mesurer le temps CPU et en plus combien de temps est passé à l'intérieur de chaque fonction et combien de fois chaque fonction est appelée. Ceci est très utile si vous souhaitez améliorer les performances de votre script sans savoir par où commencer. Cette réponse à une autre question Stack Overflow est plutôt bonne. Il est toujours bon de jeter un œil à la documentation aussi.
Voici un exemple de profilage d'un script à l'aide de cProfile à partir d'une ligne de commande:
la source
X function calls in Y CPU seconds
. Si vous voulez une horloge murale, utilisez l'une des autres réponses ici.Encore mieux pour Linux:
time
la source
time.clock ()
time.perf_counter ()
time.process_time ()
la source
Utilisez simplement le
timeit
module. Il fonctionne avec Python 2 et Python 3.Il revient en quelques secondes et vous pouvez avoir votre temps d'exécution. C'est simple, mais vous devez les écrire dans la fonction principale w qui démarre l'exécution du programme. Si vous souhaitez obtenir le temps d'exécution même lorsque vous obtenez une erreur, apportez-y votre paramètre "Démarrer" et calculez-le comme suit:
la source
finally
partie?L'extrait suivant imprime le temps écoulé dans un joli
<HH:MM:SS>
format lisible par l'homme .la source
la source
Dans IPython , "timeit" n'importe quel script:
la source
Il exécute la
your_module.main()
fonction une fois et imprime le temps écoulé à l'aide de latime.time()
fonction de minuterie.Pour émuler
/usr/bin/time
en Python, voir sous-processus Python avec / usr / bin / time: comment capturer les informations de synchronisation mais ignorer toutes les autres sorties? .Pour mesurer le temps CPU (par exemple, ne pas inclure le temps pendant
time.sleep()
) pour chaque fonction, vous pouvez utiliser leprofile
module (cProfile
sur Python 2):Vous pouvez passer
-p
à latimeit
commande ci-dessus si vous souhaitez utiliser le même temporisateur que celuiprofile
utilisé par le module.Voir Comment pouvez-vous profiler un script Python?
la source
J'ai aussi aimé la réponse de Paul McGuire et j'ai trouvé un formulaire de gestionnaire de contexte qui correspondait mieux à mes besoins.
la source
Pour les utilisateurs de données utilisant Jupyter Notebook
Dans une cellule, vous pouvez utiliser la
%%time
commande magique de Jupyter pour mesurer le temps d'exécution:Production
Cela ne capturera que le temps d'exécution d'une cellule particulière. Si vous souhaitez capturer le temps d'exécution de tout le bloc-notes (c'est-à-dire le programme), vous pouvez créer un nouveau bloc-notes dans le même répertoire et dans le nouveau bloc-notes exécuter toutes les cellules:
Supposons que le carnet ci-dessus soit appelé
example_notebook.ipynb
. Dans un nouveau carnet dans le même répertoire:Production
la source
Il existe un
timeit
module qui peut être utilisé pour chronométrer les temps d'exécution du code Python.Il a une documentation détaillée et des exemples dans la documentation Python, 26.6. timeit - Mesurer le temps d'exécution de petits extraits de code .
la source
timeit
dans la question. La question est de savoir comment il peut être utilisé ici (ou devrait-il être utilisé ici et quelles sont les alternatives). Voici une réponse possible .Utilisez line_profiler .
line_profiler profilera le temps nécessaire à l'exécution de chaque ligne de code. Le profileur est implémenté en C via Cython afin de réduire les frais généraux de profilage.
Les résultats seront:
la source
J'ai utilisé une fonction très simple pour chronométrer une partie de l'exécution du code:
Et pour l'utiliser, il suffit de l'appeler avant le code à mesurer pour récupérer le timing de la fonction, puis d'appeler la fonction après le code avec des commentaires. L'heure apparaîtra devant les commentaires. Par exemple:
Ensuite, la sortie ressemblera à ceci:
la source
J'avais le même problème dans de nombreux endroits, j'ai donc créé un package de commodité
horology
. Vous pouvez l'installer avecpip install horology
, puis le faire de manière élégante:affichera:
Ou encore plus simple (si vous avez une fonction):
affichera:
Il s'occupe des unités et des arrondis. Il fonctionne avec python 3.6 ou plus récent.
la source
main.interval
.C'est la réponse de Paul McGuire qui fonctionne pour moi. Juste au cas où quelqu'un aurait du mal à gérer celui-ci.
Appelez
timing.main()
depuis votre programme après avoir importé le fichier.la source
Timeit est une classe en Python utilisée pour calculer le temps d'exécution de petits blocs de code.
Default_timer est une méthode de cette classe qui est utilisée pour mesurer le timing de l'horloge murale, pas le temps d'exécution du CPU. Ainsi, l'exécution d'autres processus pourrait interférer avec cela. Il est donc utile pour les petits blocs de code.
Un exemple du code est le suivant:
la source
timeit
est la meilleure réponse IMO pour de nombreux cas.Réponse plus tard, mais j'utilise
timeit
:code_to_test
.number
L'argument spécifie le nombre de fois que le code doit se répéter.la source
L'heure de la mesure d'exécution d'un programme Python peut être incohérente selon:
En effet, le moyen le plus efficace consiste à utiliser l '"Ordre de croissance" et à apprendre la grande notation "O" pour le faire correctement.
Quoi qu'il en soit, vous pouvez essayer d'évaluer les performances de n'importe quel programme Python dans des étapes de comptage de machine spécifiques par seconde en utilisant cet algorithme simple: adaptez-le au programme que vous souhaitez évaluer
la source
Vous faites cela simplement en Python. Il n'est pas nécessaire de compliquer les choses.
la source
Semblable à la réponse de @rogeriopvl, j'ai ajouté une légère modification pour convertir en heure minute seconde en utilisant la même bibliothèque pour les travaux de longue durée.
Exemple de sortie
la source
Tout d'abord, installez le package convivial en ouvrant l'invite de commande (CMD) en tant qu'administrateur et tapez-le -
pip install humanfriendly
Code:
Production:
la source
Pour utiliser la réponse mise à jour de metakermit pour Python 2.7, vous aurez besoin du package monotone .
Le code serait alors le suivant:
la source
J'ai essayé et trouvé la différence de temps en utilisant les scripts suivants.
la source
Si vous souhaitez mesurer le temps en microsecondes, vous pouvez utiliser la version suivante, basée entièrement sur les réponses de Paul McGuire et Nicojo - c'est du code Python 3. Je lui ai également ajouté de la couleur:
log () => fonction qui imprime les informations de chronométrage.
txt ==> premier argument à consigner, et sa chaîne pour marquer le timing.
atexit ==> Module Python pour enregistrer les fonctions que vous pouvez appeler lorsque le programme se termine.
la source