Profiling de código para uso de memória

Escrevendo código Python eficiente

Logan Thomas

Scientific Software Technical Trainer, Enthought

Abordagem simples e rápida

import sys
nums_list = [*range(1000)]
sys.getsizeof(nums_list)
9112
import numpy as np

nums_np = np.array(range(1000))
sys.getsizeof(nums_np)
8096
Escrevendo código Python eficiente

Profiling de código: memória

  • Estatísticas detalhadas do consumo de memória
  • Análises linha a linha
  • Pacote usado: memory_profiler
pip install memory_profiler
  • Usando o pacote memory_profiler
%load_ext memory_profiler

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

Profiling de código: memória

  • As funções devem ser importadas ao usar memory_profiler
    • hero_funcs.py

 

from hero_funcs import convert_units
%load_ext memory_profiler

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

Saída do %mprun

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

alt=”Saída tabular do comando mágico mprun resumindo estatísticas de perfil de uso de memória”

Escrevendo código Python eficiente

Saída do %mprun

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

alt=”Saída tabular do comando mágico mprun resumindo estatísticas de perfil de uso de memória, com a coluna Line # destacada”

Escrevendo código Python eficiente

Saída do %mprun

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

alt=”Saída tabular do comando mágico mprun resumindo estatísticas de perfil de uso de memória, com a coluna Mem usage destacada”

Escrevendo código Python eficiente

Saída do %mprun

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

alt=”Saída tabular do comando mágico mprun resumindo estatísticas de perfil de uso de memória, com a coluna Increment destacada”

Escrevendo código Python eficiente

Saída do %mprun

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

alt=”Saída tabular do comando mágico mprun resumindo estatísticas de perfil de uso de memória, com a coluna Line contents destacada”

Escrevendo código Python eficiente

Saída do %mprun

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

alt=”Saída tabular do comando mágico mprun resumindo estatísticas de perfil de uso de memória”

Escrevendo código Python eficiente

Atenções na saída do %mprun

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

alt=”Saída tabular do comando mágico mprun resumindo estatísticas de perfil de uso de memória, com mebibytes (MiB) destacados na saída”

Escrevendo código Python eficiente

Atenções na saída do %mprun

Os dados deste exemplo são uma amostra aleatória de 35.000 heróis.

(não é o dataset original de 480 super-heróis)

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

alt=”Saída tabular do comando mágico mprun resumindo estatísticas de perfil de uso de memória”

Escrevendo código Python eficiente

Atenções na saída do %mprun

Alocações pequenas podem resultar em 0.0 MiB na saída.

(usando o dataset original de 480 super-heróis)

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

alt=”Saída tabular do comando mágico mprun resumindo estatísticas de perfil de uso de memória, com todas as linhas da coluna Increment mostrando 0.0 MiB”

Escrevendo código Python eficiente

Atenções na saída do %mprun

  • Inspeciona a memória consultando o sistema operacional
  • Resultados podem variar entre plataformas e execuções
    • Ainda dá para comparar linhas de código pelo consumo de memória
Escrevendo código Python eficiente

Vamos praticar!

Escrevendo código Python eficiente

Preparing Video For Download...