1

Pythonでプロジェクトのプロファイルを作成しようとしていますが、メモリが不足しています。

私のプロジェクト自体はかなりメモリを消費しますが、cProfileで実行すると、ハーフサイズの実行でさえ「MemoryError」で停止します。

実行時間は超線形にスケーリングしていると思われるため、小規模な実行を行うことは適切なオプションではありません。また、大規模な実行中にどの関数が支配的であるかを見つけようとしています。

なぜcProfileはそれほど多くのメモリを消費するのですか?安くすることはできますか?これは正常ですか?

4

1 に答える 1

1

更新: cProfile は Python の現在のバージョン (_lsprof 拡張子) に組み込まれているため、メイン アロケーターを使用する必要があります。これがうまくいかない場合、Python 2.7.1 には、実行時--with-valgrindに使用するように切り替えるコンパイラ オプションがあります。malloc()抑制ファイルを使用する必要がなくなるため、これは便利です。プロファイリング専用のバージョンをビルドし、valgrind で Python アプリを実行して、プロファイラーによって行われたすべての割り当てと、カスタム割り当てスキームを使用する C 拡張機能を確認できます。

(元の回答の残りは次のとおりです):

たぶん、割り当てがどこに向かっているかを確認してみてください。コード内にメモリ使用量を定期的にダンプできる場所がある場合は、を使用guppyして割り当てを表示できます。

import lxml.html
from guppy import hpy

hp = hpy()
trees = {}
for i in range(10):
    # do something
    trees[i] = lxml.html.fromstring("<html>")
    print hp.heap()

    # examine allocations for specific objects you suspect
    print hp.iso(*trees.values())
于 2011-03-10T22:35:48.843 に答える