Snakeviz, du profiling de code Python haut en couleur

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.

snakeviz profiling python haut 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
0

Laisser un commentaire