1. ホーム
  2. パイソン

[解決済み】Pythonでメモリ使用量をプロファイルするにはどうすればよいですか?

2022-03-30 05:54:19

質問

最近アルゴリズムに興味を持ち、素朴な実装を書き、それを様々な方法で最適化することで探求を始めています。

私はすでにランタイムプロファイリングのための標準的なPythonモジュールに精通しています(ほとんどのことについては、IPythonのtimeitマジック関数で十分であることがわかりました)、私は同様にそれらのトレードオフ(例えば、以前に計算した値のテーブルをキャッシュするコストと必要に応じてそれらを再計算すること)を探索できるようにメモリ使用にも興味があります。与えられた関数のメモリ使用量をプロファイリングしてくれるモジュールはないでしょうか?

どのように解決するのですか?

こちらはすでにこちらで回答済みです。 Pythonメモリプロファイラ

基本的にはこのようなことをするのです(以下引用 グッピー・PE ):

>>> from guppy import hpy; h=hpy()
>>> h.heap()
Partition of a set of 48477 objects. Total size = 3265516 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0  25773  53  1612820  49   1612820  49 str
     1  11699  24   483960  15   2096780  64 tuple
     2    174   0   241584   7   2338364  72 dict of module
     3   3478   7   222592   7   2560956  78 types.CodeType
     4   3296   7   184576   6   2745532  84 function
     5    401   1   175112   5   2920644  89 dict of class
     6    108   0    81888   3   3002532  92 dict (no owner)
     7    114   0    79632   2   3082164  94 dict of type
     8    117   0    51336   2   3133500  96 type
     9    667   1    24012   1   3157512  97 __builtin__.wrapper_descriptor
<76 more rows. Type e.g. '_.more' to view.>
>>> h.iso(1,[],{})
Partition of a set of 3 objects. Total size = 176 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0      1  33      136  77       136  77 dict (no owner)
     1      1  33       28  16       164  93 list
     2      1  33       12   7       176 100 int
>>> x=[]
>>> h.iso(x).sp
 0: h.Root.i0_modules['__main__'].__dict__['x']
>>>