概要
Python でメモリの利用量が知りたい場合、「memory_profiler」を使うと便利。
ライセンスはBSDで、Python 3 にも対応している。
インストール
pip でインストールする。psutilもインストールすると速度が早くなるのでインストールする。
pip install psutil
pip install memory_profiler
使い方
以下の使いかたは、「memory_profiler」に書いてあることそのまま。
計測したいメソッドに「@profile」を付けて、「memory_profiler」を利用して実行する。
sample.py の名前で以下のファイルを作成。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
@profile
def main():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a
if __name__ == '__main__':
main()
以下のように実行する。
python -m memory_profiler sample.py
出力は以下のようになる。一行ずつ実行した時点でのメモリ総量、メモリ増減量とかを表示する。
Filename: sample.py
Line # Mem usage Increment Line Contents
================================================
4 @profile
5 8.19 MB 0.00 MB def main():
6 15.82 MB 7.63 MB a = [1] * (10 ** 6)
7 168.41 MB 152.59 MB b = [2] * (2 * 10 ** 7)
8 15.82 MB -152.59 MB del b
9 15.82 MB 0.00 MB return a
ipythonで使う
設定するとipythonから使うことも可能。
「 ~/.ipython/extensions/memory_profiler_ext.py」に以下のファイルを作成。
import memory_profiler
def load_ipython_extension(ip):
ip.define_magic('mprun', memory_profiler.magic_mprun)
ip.define_magic('memit', memory_profiler.magic_memit)
「 ~/.ipython/profile_default/ipython_config.py」の該当箇所に以下を追加。
c.TerminalIPythonApp.extensions = [
'memory_profiler_ext',
]
c.InteractiveShellApp.extensions = [
'memory_profiler_ext',
]
これを設定することで、ipythonで「python -m memory_profiler」と同じことが「%mprun」で可能になる。
また「%memit」に続けて書くことで、メモリ計測が可能。
その他
ほかにも help で見るといろいろ説明が書いてあるが、このぐらいの機能しか使っていない。今後もうすこし使ってみるかもしれない。