Est-il un moyen simple de référence de script python?
Habituellement j'utilise la commande du shell time
. Mon but est de tester si les données sont de petite, moyenne, grande ou très grande, comment beaucoup de temps et de la mémoire sera.
Tous les outils pour linux ou tout simplement python pour ce faire?
Vous devez vous connecter pour publier un commentaire.
Ont un coup d'oeil à timeit, le python profiler et pycallgraph.
timeit
Essentiellement, vous pouvez passer le code python comme un paramètre de chaîne, et il sera exécuté dans le laps de temps et imprime le temps d'exécution. Les choses importantes à partir de la documentation:
... et:
Profilage
De profilage de vous donner un beaucoup plus détaillée idée de ce qui se passe. Voici la "instantanée exemple" de les docs officielles:
Qui vous donnera:
Deux de ces modules devraient vous donner une idée de où chercher pour les goulets d'étranglement.
Aussi, de se familiariser avec la sortie de
profile
, jetez un oeil à ce postpycallgraph
Ce module utilise graphviz pour créer callgraphs comme suit:
Vous pouvez facilement voir quels chemins utilisés la plupart du temps par la couleur. Vous pouvez les créer à l'aide de la pycallgraph API, ou à l'aide d'un emballés script:
La surcharge est tout à fait considérable si. Donc, déjà, le long processus en cours d'exécution, la création du graphique peut prendre un certain temps.
python -m cProfile -o results.prof myscript.py
. Le oputput fichier peut ensuite être très joliment présenté dans un navigateur par un programme appelé SnakeViz à l'aide desnakeviz results.prof
J'utilise un simple décorateur temps la touche func
La
timeit
module a été lente et bizarre, j'ai donc écrit ceci:Exemple:
Pour moi, il dit:
C'est un type primitif de l'analyse comparative, mais il est assez bon.
J'ai l'habitude de faire un rapide
time ./script.py
pour voir combien de temps cela prend. Que ne vous montre pas la mémoire si, au moins pas en tant que par défaut. Vous pouvez utiliser/usr/bin/time -v ./script.py
d'obtenir beaucoup d'informations, y compris l'utilisation de la mémoire./usr/bin/time
avec-v
option n'est pas disponible par défaut dans de nombreuses distributions, doit être installé.sudo apt-get install time
dans debian, ubuntu, etc.pacman -S time
archlinuxOnt un coup d'oeil à nez et à l'un de ses plugins, cette une en particulier.
Une fois installé, le nez est un script sur votre chemin, et que vous pouvez appeler dans un répertoire qui contient des scripts python:
Cela va chercher dans tous les fichiers python dans le répertoire courant et va exécuter une fonction qu'il reconnaît comme un test: il reconnaît par exemple une fonction avec le mot test_ en son nom comme un test.
De sorte que vous pouvez simplement créer un script python appelé test_yourfunction.py et d'écrire quelque chose comme ça:
Alors vous devez exécuter
et de lire le fichier de profil, utilisez ce python ligne:
nose
s'appuie sur hotshot. Il n'est plus maintenu depuis Python 2.5 et ne sont conservés que "spécialisé utilisation"Profileur de mémoire pour tous vos besoins de mémoire.
https://pypi.python.org/pypi/memory_profiler
Exécuter un pip install:
Importer la bibliothèque:
Ajouter un décorateur à l'élément que vous souhaitez profil:
Exécuter le code:
Recevoir de la sortie:
Sont des exemples de la documentation, lien ci-dessus.
Attention
timeit
est très lent, il faudra 12 seconde sur mon support de processeur pour initialiser (ou peut-être l'exécution de la fonction). vous pouvez tester ce accepté de répondre àpour la simple chose que je vais utiliser
time
au lieu de cela, sur mon PC, il retournera le résultat0.0
timeit
s'exécute ta fonction beaucoup fois, de faire la moyenne du bruit. Le nombre de répétitions est une option, reportez-vous à l'analyse comparative des temps d'exécution, en python ou sur la partie plus tard de la accepté de répondre à cette question.Le moyen facile de tester rapidement de toute fonction est d'utiliser cette syntaxe :
%timeit my_code
Par exemple :
Si vous ne voulez pas écrire du code réutilisable pour timeit et obtenir facile à analyser les résultats, prendre un coup d'oeil à benchmarkit. Aussi il permet d'économiser de l'histoire des courses précédentes, de sorte qu'il est facile de comparer la même fonction au cours du développement.
Imprime à la borne et retourne la liste de dictionnaires avec les données de la dernière exécution. Ligne de commande entrypoints également disponibles.
Si vous modifiez
N=1000000
et exécutez à nouveau