メモリ使用のコードプロファイリング

効率的なPythonコードの書き方

Logan Thomas

Scientific Software Technical Trainer, Enthought

手早い方法

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
効率的なPythonコードの書き方

コードプロファイリング:メモリ

  • メモリ消費の詳細統計
  • 行ごとの分析
  • 使用パッケージ: memory_profiler
pip install memory_profiler
  • memory_profiler を使用
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
効率的なPythonコードの書き方

コードプロファイリング:メモリ

  • memory_profiler 使用時は関数をインポートする必要あり
    • hero_funcs.py

 

from hero_funcs import convert_units
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
効率的なPythonコードの書き方

%mprun の出力

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

alt=”メモリ使用量のプロファイリング統計を表で示す mprun マジックの出力”

効率的なPythonコードの書き方

%mprun の出力

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

alt=”メモリ使用量のプロファイリング統計を表で示す mprun マジックの出力。Line # 列を強調”

効率的なPythonコードの書き方

%mprun の出力

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

alt=”メモリ使用量のプロファイリング統計を表で示す mprun マジックの出力。Mem usage 列を強調”

効率的なPythonコードの書き方

%mprun の出力

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

alt=”メモリ使用量のプロファイリング統計を表で示す mprun マジックの出力。Increment 列を強調”

効率的なPythonコードの書き方

%mprun の出力

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

alt=”メモリ使用量のプロファイリング統計を表で示す mprun マジックの出力。Line contents 列を強調”

効率的なPythonコードの書き方

%mprun の出力

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

alt=”メモリ使用量のプロファイリング統計を表で示す mprun マジックの出力”

効率的なPythonコードの書き方

%mprun の出力の注意点

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

alt=”メモリ使用量のプロファイリング統計を表で示す mprun マジックの出力。出力の mebibytes (MiB) を強調”

効率的なPythonコードの書き方

%mprun の出力の注意点

この例のデータは 35,000 人のヒーローの無作為サンプルです。

(元の 480 人のスーパーヒーローデータではありません)

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

alt=”メモリ使用量のプロファイリング統計を表で示す mprun マジックの出力”

効率的なPythonコードの書き方

%mprun の出力の注意点

小さなメモリ割当は 0.0 MiB と表示されることがあります。

(元の 480 人のスーパーヒーローデータを使用)

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

alt=”メモリ使用量のプロファイリング統計を表で示す mprun マジックの出力。Increment 列の全行が 0.0 MiB を示す”

効率的なPythonコードの書き方

%mprun の出力の注意点

  • OS への問い合わせでメモリを計測
  • プラットフォームや実行ごとに結果が異なる場合あり
    • それでも各行のメモリ消費の比較は可能
効率的なPythonコードの書き方

Let's practice!

効率的なPythonコードの書き方

Preparing Video For Download...