documentation для memory_profiler предлагает простой пример, показывающий изменения в использовании памяти из-за создания и удаления списка.Python memory_profiler: память не добавляется
from memory_profiler import profile
@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a
if __name__ == '__main__':
my_func()
Который производит следующий вывод:
Line # Mem usage Increment Line Contents
==============================================
3 @profile
4 5.97 MB 0.00 MB def my_func():
5 13.61 MB 7.64 MB a = [1] * (10 ** 6)
6 166.20 MB 152.59 MB b = [2] * (2 * 10 ** 7)
7 13.61 MB -152.59 MB del b
8 13.61 MB 0.00 MB return a
Когда b
удаляется, его использование памяти освобожденное. Я играл и менял пример на следующий, где я также удаляю a
.
from memory_profiler import profile
@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del a
del b
return None
if __name__ == '__main__':
my_func()
Здесь, однако, удаление a
не сопровождается - я бы наивно ожидать, - уменьшением использования памяти. На самом деле кажется, что ничего не происходит.
Line # Mem usage Increment Line Contents
================================================
12 25.1 MiB 0.0 MiB @profile
13 def my_func():
14 32.7 MiB 7.6 MiB a = [1] * (10 ** 6)
15 185.3 MiB 152.6 MiB b = [2] * (2 * 10 ** 7)
16 185.3 MiB 0.0 MiB del a
17 32.7 MiB -152.6 MiB del b
18 32.7 MiB 0.0 MiB return None
Что происходит?
это нормально на моей 8-Гбайт ОЗУ ubuntu 16.04 с python2.7 и memory_profiler 0.45. – suiyuan2009