Обновлено : поскольку cProfile встроен в текущие версии Python (расширение _lsprof), он должен использовать основной распределитель. Если это не работает для вас, Python 2.7.1 имеет опцию компилятора --with-valgrind
, которая заставляет его переключиться на использование malloc()
во время выполнения. Это хорошо, так как избегает необходимости использовать файл подавлений. Вы можете создать версию только для профилирования, а затем запустить приложение Python под valgrind, чтобы просмотреть все выделения, сделанные профилировщиком, а также любые расширения 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())