memory_profiles

メモリ使用量を監視してボトルネックを発見しやすくする。

インストール

Anacondaやpipでインストールするだけ。依存するpsutilも同時に入る。

> conda install memory_profiles

Windowsでの注意

pythonでファイルを開くとき、デフォルトのエンコード方式はシステム依存。Windows7日本版では'cp932'(shift-jisの一種)

なので、utf-8などで書かれたテキスト(ascii外文字を含むもの)を何も指定せず読み込むと、UnicodeDecodeErrorが発生する。

memory_profiles(ver.0.41)のモジュール内では、何も指定せずファイルを開いている箇所が存在する。

ファイルを書き換えて、エンコードを指定する。アップデートのたびに書き換わってしまうが、プログラム上からデフォルトエンコードを変える方法がよくわからなかった。スクリプトファイルの方をshift-jisに合わせても問題は一応解決するが、それも変だし。

if PY3:
    def exec_with_profiler(filename, profiler):
        builtins.__dict__['profile'] = profiler
        # shadow the profile decorator defined above
        ns = dict(_CLEAN_GLOBALS, profile=profiler)
        with open(filename, encoding='utf-8') as f:  # ←ここに、左のようにencoding='utf-8'を加える
            exec(compile(f.read(), filename, 'exec'), ns, ns)

使い方

デバッグしたい関数を@profileでデコレート

@profile
def test():
    a = list(range(100000))

if __name__ == '__main__':
    test()

pythonで、モジュールを指定して実行

> python -m memory_profiles test.py

Filename: D:/Tago/Projects-python/etc20/trivial/memory.py

Line #    Mem usage    Increment   Line Contents
================================================
     8   28.309 MiB    0.000 MiB   @profile
     9                             def test():
    10   32.176 MiB    3.867 MiB       a = list(range(100000))

10万要素の整数リストは、およそ4MB使うことがわかる。

本WebサイトはcookieをPHPのセッション識別および左欄目次の開閉状況記憶のために使用しています。同意できる方のみご覧ください。More information about cookies
programming/python/packages/memory_profiles.txt · 最終更新: 2016/11/24 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0