Я пытался понять, как это сделать для себя. Я пробовал несколько решений на этой и других страницах. Затем я немного поискал и наткнулся на https://ipython-books.github.io/44-profiling-the-memory-usage-of-your-code-with-memory_profiler/, который, кажется, дает альтернативное решение. Суть решения: используйте %mprun в ipython.
- Сначала установите memory_profiler:
pip install memory_profiler
- Запустите ipython и загрузите memory_profiler:% load_ext memory_profiler
- Создайте функцию в физическом файле, скажем,
myfunc.py (важно: % mprun можно использовать только для функций, определенных в физических файлах). Создайте рассматриваемый объект в функции, например:
# myfunc.py
def myfunc():
# create the object, e.g.
a = [*range(10000)]
- Бегать
from myfunc import myfunc
%mprun -T mprof -f myfunc myfunc()
который генерирует файл mprof. Также отображается контент:
Line # Mem usage Increment Line Contents
================================================
1 49.1 MiB 49.1 MiB def myfunc():
2 # create the object, e.g.
3 49.4 MiB 0.3 MiB a = [*range(10000)]
Из строки 3 мы знаем, что память, используемая a, составляет 0,3 МБ.
Попробуем a = [*range(100000)]:
# myfunc1.py
def myfunc1():
# create the object, e.g.
a = [*range(100000)]
Бегать
from myfunc1 import myfunc1
%mprun -T mprof1 -f myfunc1 myfunc1()
Line # Mem usage Increment Line Contents
================================================
1 49.2 MiB 49.2 MiB def myfunc1():
2 # create the object, e.g.
3 52.3 MiB 3.0 MiB a = [*range(100000)]
похоже, соответствует нашим ожиданиям.
person
mikey
schedule
13.10.2019