Perfil de código para tempo de execução

Escrevendo código Python eficiente

Logan Thomas

Scientific Software Technical Trainer, Enthought

Perfil de código

  • Estatísticas detalhadas de frequência e duração de chamadas
  • Análises linha a linha
  • Pacote usado: line_profiler
pip install line_profiler
Escrevendo código Python eficiente

Perfil de código: tempo de execução

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

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

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

Perfil de código: tempo de execução

%timeit convert_units(heroes, hts, wts)
3 µs ± 32 ns por loop (média ± desvio padrão de 7 execuções, 100000 loops cada)
Escrevendo código Python eficiente
%timeit new_hts = [ht * 0.39370  for ht in hts]
1.09 µs ± 11 ns por loop (média ± desvio padrão de 7 execuções, 1000000 loops cada)
%timeit new_wts = [wt * 2.20462  for wt in wts]
1.08 µs ± 6.42 ns por loop (média ± desvio padrão de 7 execuções, 1000000 loops cada)
%%timeit
hero_data = {}
for i,hero in enumerate(heroes):
    hero_data[hero] = (new_hts[i], new_wts[i])
634 ns ± 9.29 ns por loop (média ± desvio padrão de 7 execuções, 1000000 loops cada)
Escrevendo código Python eficiente

Perfil de código: line_profiler

Usando o pacote line_profiler

%load_ext line_profiler

Comando mágico para tempos por linha

%lprun -f
Escrevendo código Python eficiente

Perfil de código: line_profiler

Usando o pacote line_profiler

%load_ext line_profiler

Comando mágico para tempos por linha

%lprun -f convert_units
Escrevendo código Python eficiente

Perfil de código: line_profiler

Usando o pacote line_profiler

%load_ext line_profiler

Comando mágico para tempos por linha

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

Saída do %lprun

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

alt=”Saída tabular do comando mágico lprun com estatísticas de perfil de tempo de execução”

Escrevendo código Python eficiente

Saída do %lprun

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

alt=”Saída tabular do comando mágico lprun com colunas Line # e Hits destacadas”

Escrevendo código Python eficiente

Saída do %lprun

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

alt=”Saída tabular do comando mágico lprun com coluna Time destacada”

Escrevendo código Python eficiente

Saída do %lprun

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

alt=”Saída tabular do comando mágico lprun com a unidade da primeira linha em Time destacada”

Escrevendo código Python eficiente

Saída do %lprun

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

alt=”Saída tabular do comando mágico lprun com a linha três destacada”

Escrevendo código Python eficiente

Saída do %lprun

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

alt=”Saída tabular do comando mágico lprun com a coluna Per Hit destacada”

Escrevendo código Python eficiente

Saída do %lprun

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

Saída tabular do comando mágico lprun com a linha nove destacada

Escrevendo código Python eficiente

Saída do %lprun

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

alt=”Saída tabular do comando mágico lprun com a coluna % Time destacada”

Escrevendo código Python eficiente

Saída do %lprun

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

alt=”Saída tabular do comando mágico lprun com a coluna Line Contents destacada”

Escrevendo código Python eficiente
%timeit convert_units convert_units(heroes, hts, wts)
3 µs ± 32 ns por loop (média ± desvio padrão de 7 execuções, 100000 loops cada)
%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Saída tabular do comando mágico lprun com a segunda linha Total time destacada"

Escrevendo código Python eficiente

Vamos praticar!

Escrevendo código Python eficiente

Preparing Video For Download...