Upload
cs-center
View
78
Download
4
Embed Size (px)
Citation preview
@profile
def my_func(): a = [1] * (10 ** 6) b = [2] * (2 * 10 ** 7) del b return a
if __name__ == '__main__': my_func()
2/14
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
4/14
Часто работает не очень точно
Не отслеживает малые аллокации
Зависит от пакета psutil или операционной системы(posix)
Не всегда корректно обрабатывает освобождение памяти
5/14
Реализована возможность выбора инструмента для отслеживания изменений памяти: psutil, tracemalloc или средствами posix
$ python -m memory_profiler
--backend=tracemalloc example.py
8/14
n=10^3, inc=0.000 MiB, dec=-0.000 MiB, size=0.001 MiB
n=10^4, inc=0.000 MiB, dec=-0.000 MiB, size=0.010 MiB
n=10^5, inc=0.102 MiB, dec=-0.000 MiB, size=0.095 MiB
n=10^6, inc=0.863 MiB, dec=0.949 MiB, size=0.954 MiB
n=10^7, inc=9.559 MiB, dec=9.559 MiB, size=9.537 MiB
n=10^8, inc=95.559 MiB, dec=95.559 MiB, size=95.367 MiB
10 /14
n=10^3, inc=0.001 MiB, dec=0.001 MiB, size=0.001 MiB
n=10^4, inc=0.010 MiB, dec=0.010 MiB, size=0.010 MiB
n=10^5, inc=0.095 MiB, dec=0.095 MiB, size=0.095 MiB
n=10^6, inc=0.954 MiB, dec=0.954 MiB, size=0.954 MiB
n=10^7, inc=9.537 MiB, dec=9.537 MiB, size=9.537 MiB
n=10^8, inc=95.367 MiB, dec=95.367 MiB, size=95.367 MiB
11 /14
Не отслеживаются выделения памяти в пакетах, которые не используют API аллокаторов, добавленное в PEP 454 (например, tracemalloc не видит NumPy массивы)
Долго работает, если мест, где выделяется память много (время работы ~ кол-во инструкций байт-кода * кол-во аллокаций)
13 /14
https://github.com/fabianp/memory_profiler
https://github.com/demiurg906/memory_profiler
14 /14