Profilage de code pour le temps d'exécution

Rédiger du code Python efficace

Logan Thomas

Scientific Software Technical Trainer, Enthought

Profilage de code

  • Statistiques détaillées sur la fréquence et la durée des appels de fonctions
  • Analyses ligne par ligne
  • Forfait utilisé : line_profiler
pip install line_profiler
Rédiger du code Python efficace

Profilage de code : temps d'exécution

heroes = ['Batman', 'Superman', 'Wonder Woman']

hts = np.array([188.0, 191.0, 183.0])

wts = np.array([ 95.0, 101.0,  74.0])
Rédiger du code Python efficace
def convert_units(heroes, heights, weights):

    new_hts = [ht * 0.39370  for ht in heights]
    new_wts = [wt * 2.20462  for wt in weights]

    hero_data = {}

    for i,hero in enumerate(heroes):
        hero_data[hero] = (new_hts[i], new_wts[i])

    return hero_data
convert_units(heroes, hts, wts)
{'Batman': (74.0156, 209.4389),
 'Superman': (75.1967, 222.6666),
 'Wonder Woman': (72.0471, 163.1419)}
Rédiger du code Python efficace

Profilage de code : temps d'exécution

%timeit convert_units(heroes, hts, wts)
3 µs ± 32 ns par boucle (moyenne ± éc.-type de 7 exécutions, 100000 boucles chacune)
Rédiger du code Python efficace
%timeit new_hts = [ht * 0.39370  for ht in hts]
1,09 µs ± 11 ns par boucle (moyenne ± éc.-type de 7 exécutions, 1000000 boucles chacune)
%timeit new_wts = [wt * 2.20462  for wt in wts]
1,08 µs ± 6,42 ns par boucle (moyenne ± éc.-type de 7 exécutions, 1000000 boucles chacune)
%%timeit
hero_data = {}
for i,hero in enumerate(heroes):
    hero_data[hero] = (new_hts[i], new_wts[i])
634 ns ± 9,29 ns par boucle (moyenne ± éc.-type de 7 exécutions, 1000000 boucles chacune)
Rédiger du code Python efficace

Profilage de code : line_profiler

Avec le forfait line_profiler

%load_ext line_profiler

Commande magique pour chronométrer ligne par ligne

%lprun -f
Rédiger du code Python efficace

Profilage de code : line_profiler

Avec le forfait line_profiler

%load_ext line_profiler

Commande magique pour chronométrer ligne par ligne

%lprun -f convert_units
Rédiger du code Python efficace

Profilage de code : line_profiler

Avec le forfait line_profiler

%load_ext line_profiler

Commande magique pour chronométrer ligne par ligne

%lprun -f convert_units convert_units(heroes, hts, wts)
Rédiger du code Python efficace

Sortie de %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Sortie tabulaire de la commande magique lprun résumant les statistiques de profilage du temps d'exécution"

Rédiger du code Python efficace

Sortie de %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Sortie tabulaire de la commande magique lprun résumant les statistiques de profilage du temps d'exécution avec les colonnes Line # et Hits en surbrillance"

Rédiger du code Python efficace

Sortie de %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Sortie tabulaire de la commande magique lprun résumant les statistiques de profilage du temps d'exécution avec la colonne Time en surbrillance"

Rédiger du code Python efficace

Sortie de %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Sortie tabulaire de la commande magique lprun résumant les statistiques de profilage du temps d'exécution avec l'unité de Time sur la première ligne en surbrillance"

Rédiger du code Python efficace

Sortie de %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Sortie tabulaire de la commande magique lprun résumant les statistiques de profilage du temps d'exécution avec la ligne trois en surbrillance"

Rédiger du code Python efficace

Sortie de %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Sortie tabulaire de la commande magique lprun résumant les statistiques de profilage du temps d'exécution avec la colonne Per Hit en surbrillance"

Rédiger du code Python efficace

Sortie de %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

Sortie tabulaire de la commande magique lprun résumant les statistiques de profilage du temps d'exécution avec la ligne neuf en surbrillance

Rédiger du code Python efficace

Sortie de %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Sortie tabulaire de la commande magique lprun résumant les statistiques de profilage du temps d'exécution avec la colonne % Time en surbrillance"

Rédiger du code Python efficace

Sortie de %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Sortie tabulaire de la commande magique lprun résumant les statistiques de profilage du temps d'exécution avec la colonne Line Contents en surbrillance"

Rédiger du code Python efficace
%timeit convert_units convert_units(heroes, hts, wts)
3 µs ± 32 ns par boucle (moyenne ± éc.-type de 7 exécutions, 100000 boucles chacune)
%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Sortie tabulaire de la commande magique lprun résumant les statistiques de profilage du temps d'exécution avec la deuxième ligne Total time en surbrillance"

Rédiger du code Python efficace

Passons à la pratique !

Rédiger du code Python efficace

Preparing Video For Download...