Profilage de code pour l'exécution

Écrire 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 fonction
  • Analyses ligne par ligne
  • Package utilisé : line_profiler
pip install line_profiler
Écrire du code Python efficace

Profilage de code : durée 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])
Écrire 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)}
Écrire du code Python efficace

Profilage de code : durée d'exécution

%timeit convert_units(heroes, hts, wts)
3 µs ± 32 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Écrire du code Python efficace
%timeit new_hts = [ht * 0.39370  for ht in hts]
1.09 µs ± 11 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit new_wts = [wt * 2.20462  for wt in wts]
1.08 µs ± 6.42 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
hero_data = {}
for i,hero in enumerate(heroes):
    hero_data[hero] = (new_hts[i], new_wts[i])
634 ns ± 9.29 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Écrire du code Python efficace

Profilage de code : line_profiler

Utilisation du package line_profiler

%load_ext line_profiler

Commande magique pour les temps ligne par ligne

%lprun -f
Écrire du code Python efficace

Profilage de code : line_profiler

Utilisation du package line_profiler

%load_ext line_profiler

Commande magique pour les temps ligne par ligne

%lprun -f convert_units
Écrire du code Python efficace

Profilage de code : line_profiler

Utilisation du package line_profiler

%load_ext line_profiler

Commande magique pour les temps ligne par ligne

%lprun -f convert_units convert_units(heroes, hts, wts)
Écrire du code Python efficace

Résultat %lprun

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

alt=”Magic command lprun tabular output summarizing runtime profiling statistics”

Écrire du code Python efficace

Résultat %lprun

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

alt=”Magic command lprun tabular output summarizing runtime profiling statistics with Line # and Hits columns highlighted”

Écrire du code Python efficace

Résultat %lprun

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

alt=”Magic command lprun tabular output summarizing runtime profiling statistics with Time column highlighted”

Écrire du code Python efficace

Résultat %lprun

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

alt=”Magic command lprun tabular output summarizing runtime profiling statistics with first line Time unit highlighted”

Écrire du code Python efficace

Résultat %lprun

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

alt=”Magic command lprun tabular output summarizing runtime profiling statistics with line three highlighted”

Écrire du code Python efficace

Résultat %lprun

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

alt=”Magic command lprun tabular output summarizing runtime profiling statistics with Per Hit column highlighted”

Écrire du code Python efficace

Résultat %lprun

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

Magic command lprun tabular output summarizing runtime profiling statistics with line nine highlighted

Écrire du code Python efficace

Résultat %lprun

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

alt=”Magic command lprun tabular output summarizing runtime profiling statistics with % Time column highlighted”

Écrire du code Python efficace

Résultat %lprun

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

alt=”Magic command lprun tabular output summarizing runtime profiling statistics with Line Contents column highlighted”

Écrire du code Python efficace
%timeit convert_units convert_units(heroes, hts, wts)
3 µs ± 32 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Magic command lprun tabular output summarizing runtime profiling statistics with second line Total time highlighted"

Écrire du code Python efficace

Mettons en pratique vos nouvelles compétences en matière de profilage.

Écrire du code Python efficace

Preparing Video For Download...