Для получения быстрой статистики профиля на ноутбуке IPython. Можно встраивать line_profiler и memory_profiler прямо в свои ноутбуки.
Еще один полезный пакет - это Pympler . Это мощный пакет профилирования, который способен отслеживать классы, объекты, функции, утечки памяти и т. Д. Примеры ниже, документы прилагаются.
Возьми!
!pip install line_profiler
!pip install memory_profiler
!pip install pympler
Загрузите это!
%load_ext line_profiler
%load_ext memory_profiler
Используй это!
%время
%time print('Outputs CPU time,Wall Clock time')
#CPU times: user 2 µs, sys: 0 ns, total: 2 µs Wall time: 5.96 µs
дает:
- Время процессора: время выполнения на уровне процессора
- sys times: время выполнения на системном уровне
- Итого: процессорное время + системное время
- Время стены: Время настенных часов
% timeit
%timeit -r 7 -n 1000 print('Outputs execution time of the snippet')
#1000 loops, best of 7: 7.46 ns per loop
- Дает лучшее время из заданного количества прогонов (r) в цикле (n) раз.
- Выводит подробности о системном кешировании:
- Когда фрагменты кода выполняются несколько раз, система кэширует несколько операций и не выполняет их снова, что может снизить точность отчетов профиля.
% prun
%prun -s cumulative 'Code to profile'
дает:
- количество вызовов функций (ncalls)
- имеет записи для каждого вызова функции (разные)
- время, затрачиваемое на звонок (percall)
- время, прошедшее до вызова этой функции (cumtime)
- название func / module называется etc ...
![Накопительный профиль](https://i.stack.imgur.com/1IkgA.png)
% memit
%memit 'Code to profile'
#peak memory: 199.45 MiB, increment: 0.00 MiB
дает:
% lprun
#Example function
def fun():
for i in range(10):
print(i)
#Usage: %lprun <name_of_the_function> function
%lprun -f fun fun()
дает:
![LineProfile](https://i.stack.imgur.com/rusPA.png)
sys.getsizeof
sys.getsizeof('code to profile')
# 64 bytes
Возвращает размер объекта в байтах.
asizeof () от pympler
from pympler import asizeof
obj = [1,2,("hey","ha"),3]
print(asizeof.asizeof(obj,stats=4))
pympler.asizeof может использоваться, чтобы исследовать, сколько памяти потребляют определенные объекты Python. В отличие от sys.getsizeof, asizeof размеров рекурсивно
![pympler.asizeof](https://i.stack.imgur.com/8jxQX.png)
трекер от пимплера
from pympler import tracker
tr = tracker.SummaryTracker()
def fun():
li = [1,2,3]
di = {"ha":"haha","duh":"Umm"}
fun()
tr.print_diff()
Отслеживает время жизни функции.
![выход трекера](https://i.stack.imgur.com/SrRj9.png)
Пакет Pympler состоит из огромного количества высокоуровневых функций для профилирования кода. Все это не может быть рассмотрено здесь. См. Прилагаемую документацию для реализации подробного профиля.
Pympler doc