3

Python でオブジェクトの正確なメモリ使用量を特定するのは難しいと読んだことを思い出します。ただし、そのスレッドは 2009 年のものであり、それ以来、Python のさまざまなメモリ プロファイラーについて読んできました (このスレッドの例を参照してください)。また、IPython はここ数か月で大幅に成熟しました (バージョン 1.0 は数日前にリリースされました)。

IPython には whos、変数名、その型、およびいくつかの基本的なデータ/情報を出力する というマジックが既にあります。

同様に、によって返される各オブジェクトのメモリ内のサイズを取得する方法はありますwho か? この目的のために既に IPython で利用できるユーティリティはありますか?

グッピーを使う

Guppy (このスレッド で推奨) には、オブジェクト タイプごとの累積メモリ使用量を取得できるコマンドがありますが、残念ながら:

  1. オブジェクトごとのメモリ使用量は表示されません
  2. サイズをバイト単位で出力します(人間が読める形式ではありません)

2 つ目については、この回答bytes2humanから適用できる可能性がありますが、最初に解析可能な形式で出力を収集する必要があります。h.heap()

しかし、最初のもの (最も重要なもの) について、Guppy にオブジェクトごとのメモリ使用量を表示させる方法はありますか?

In [6]: import guppy

In [7]: h = guppy.hpy()                                                                                                                                     

In [8]: h.heap()
Out[8]: 
Partition of a set of 2871824 objects. Total size = 359064216 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0 522453  18 151469304  42 151469304  42 dict (no owner)
     1 451503  16 36120240  10 187589544  52 numpy.ndarray
     2 425700  15 34056000   9 221645544  62 sklearn.grid_search._CVScoreTuple
     3 193439   7 26904688   7 248550232  69 unicode
     4 191061   7 22696072   6 271246304  76 str
     5 751128  26 18027072   5 289273376  81 numpy.float64
     6  31160   1 12235584   3 301508960  84 list
     7 106035   4  9441640   3 310950600  87 tuple
     8   3300   0  7260000   2 318210600  89 dict of 0xb8670d0
     9   1255   0  3788968   1 321999568  90 dict of module
<1716 more rows. Type e.g. '_.more' to view.>
4

1 に答える 1