Dans ce tutoriel, nous apprendrons qui est Snakeviz, comment et pourquoi l’utiliser lors du profiling de code Python.
Qui est Snakeviz ?
Un package Python, héritier de RunSnakeRun qui permet de visualiser un rapport de profiling généré pour du code source.>
Pourquoi utiliser Snakeviz plutôt que cProfile ?
Il permet en un clin d’oeil de voir les fonctions consommatrice de temps. Il est particulièrement intéressant quand le programme à profiler est complexe.
Le rapport en sortie de cProfile ressemble à ça.
15 function calls in 3.003 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.000 0.000 main.py:1() 1 0.000 0.000 0.000 0.000 main.py:1(Tree) 5 0.000 0.000 0.000 0.000 main.py:18(child_is_higher) 6/1 0.000 0.000 0.000 0.000 main.py:21(rec_function) 6 0.000 0.000 0.000 0.000 main.py:6(has_children) 6 0.000 0.000 0.000 0.000 main.py:7( ) 1 0.000 0.000 0.000 0.000 {built-in method builtins.__build_class__} 1 0.000 0.000 0.000 0.000 {built-in method builtins.exec} 6 0.000 0.000 0.000 0.000 {built-in method builtins.len} 6 0.000 0.000 0.000 0.000 {built-in method builtins.print} 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 6 0.000 0.000 0.000 0.000 {method 'format' of 'str' objects}
Snakeviz, en créé une version haute en couleur.

Installation
Le package est installable facilement depuis votre terminal avec pip.
pip install snakeviz
Pour voir le script Python utilisé dans ce tutoriel, cliquez ici.
Générez un rapport de profiling and démarrer le.
python -m cProfile -o profile.prof main.py snakeviz profile.prof
Interpréter les résultats
Préférences
- Deux styles de visualisation : Sunburst & Icircle
- Depth : Représente l’étendue de la visualisation, Ex : Si 3 est sélectionné à partir du cercle rose, seulement les 3 premiers niveaux de descendance seront affichés.
- Cutoff : Si le temps d’exécution d’une fonction représente une partie infime de sa fonction parente “1/1000”, on peut l’afficher en choisissant “1/1000” sinon elle ne sera pas visible.
Sunburst style
Le centre du cercle représente la racine du programme.
Chaque arc autour du cercle représente une fonction appelée dans le programme.
Plus l’arc enveloppe le cercle, plus la fonction est consommatrice de temps dans le programme.
L’arc collé au cercle rose l’enveloppe totalement.
La fonction associée consomme 98.15 % du temps total du programme.
L’arc orange à l’extremité au contraire consomme 0.93 %, très peu de temps.
Pour chaque fonction parente, on peut apercevoir un arc enfant avec la même couleur qui correspond au temps d’exécution de la fonction parente.
Vous pouvez isoler les appels d’une fonction en cliquant sur son arc.
Pour revenir à la visualisation de départ, cliquez sur “Call Stack” puis à la ligne 0.
Icircle style
Ici, on visualise le fichier de profiling sous forme d’une pile où la fonction racine est en haut et les enfants à la suite.
Table de Stats
Le tableau en dessous du graphe permet d’avoir une vue en détail et plus précise des temps consommés par fonction.
- Ncalls : Nombre d’appel
- Tottime : Temps total
- Percall : Temps pour chaque appel
- Cumtime : Temps cumulé avec les fonctions parentes dans le programme
- Percall : Temps cumulé divisé par le nombre d’appel