更新: 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())