Perfilado de código por tiempo de ejecución

Cómo escribir código Python eficiente

Logan Thomas

Scientific Software Technical Trainer, Enthought

Perfilado de código

  • Estadísticas detalladas de frecuencia y duración de llamadas
  • Análisis línea por línea
  • Paquete usado: line_profiler
pip install line_profiler
Cómo escribir código Python eficiente

Perfilado de código: tiempo de ejecución

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

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

wts = np.array([ 95.0, 101.0,  74.0])
Cómo escribir código Python eficiente
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)}
Cómo escribir código Python eficiente

Perfilado de código: tiempo de ejecución

%timeit convert_units(heroes, hts, wts)
3 µs ± 32 ns por bucle (media ± desv. típ. de 7 ejecuciones, 100000 bucles cada una)
Cómo escribir código Python eficiente
%timeit new_hts = [ht * 0.39370  for ht in hts]
1.09 µs ± 11 ns por bucle (media ± desv. típ. de 7 ejecuciones, 1000000 bucles cada una)
%timeit new_wts = [wt * 2.20462  for wt in wts]
1.08 µs ± 6.42 ns por bucle (media ± desv. típ. de 7 ejecuciones, 1000000 bucles cada una)
%%timeit
hero_data = {}
for i,hero in enumerate(heroes):
    hero_data[hero] = (new_hts[i], new_wts[i])
634 ns ± 9.29 ns por bucle (media ± desv. típ. de 7 ejecuciones, 1000000 bucles cada una)
Cómo escribir código Python eficiente

Perfilado de código: line_profiler

Usar el paquete line_profiler

%load_ext line_profiler

Comando mágico para tiempos por línea

%lprun -f
Cómo escribir código Python eficiente

Perfilado de código: line_profiler

Usar el paquete line_profiler

%load_ext line_profiler

Comando mágico para tiempos por línea

%lprun -f convert_units
Cómo escribir código Python eficiente

Perfilado de código: line_profiler

Usar el paquete line_profiler

%load_ext line_profiler

Comando mágico para tiempos por línea

%lprun -f convert_units convert_units(heroes, hts, wts)
Cómo escribir código Python eficiente

Salida de %lprun

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

alt=”Salida tabular de lprun con estadísticas de tiempo de ejecución del perfilado”

Cómo escribir código Python eficiente

Salida de %lprun

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

alt=”Salida tabular de lprun con estadísticas, con columnas Line # y Hits resaltadas”

Cómo escribir código Python eficiente

Salida de %lprun

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

alt=”Salida tabular de lprun con estadísticas, con la columna Time resaltada”

Cómo escribir código Python eficiente

Salida de %lprun

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

alt=”Salida tabular de lprun con estadísticas, con la unidad de Time de la primera línea resaltada”

Cómo escribir código Python eficiente

Salida de %lprun

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

alt=”Salida tabular de lprun con estadísticas, con la línea tres resaltada”

Cómo escribir código Python eficiente

Salida de %lprun

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

alt=”Salida tabular de lprun con estadísticas, con la columna Per Hit resaltada”

Cómo escribir código Python eficiente

Salida de %lprun

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

Salida tabular de lprun con estadísticas de tiempo de ejecución, con la línea nueve resaltada

Cómo escribir código Python eficiente

Salida de %lprun

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

alt=”Salida tabular de lprun con estadísticas, con la columna % Time resaltada”

Cómo escribir código Python eficiente

Salida de %lprun

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

alt=”Salida tabular de lprun con estadísticas, con la columna Line Contents resaltada”

Cómo escribir código Python eficiente
%timeit convert_units convert_units(heroes, hts, wts)
3 µs ± 32 ns por bucle (media ± desv. típ. de 7 ejecuciones, 100000 bucles cada una)
%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Salida tabular de lprun con estadísticas, con la segunda línea Total time resaltada"

Cómo escribir código Python eficiente

¡Vamos a practicar!

Cómo escribir código Python eficiente

Preparing Video For Download...