Para obtener estadísticas de perfil rápidas en una notebook IPython. Uno puede integrar line_profiler y memory_profiler directamente en sus cuadernos.
Otro paquete útil es Pympler . Es un poderoso paquete de creación de perfiles que es capaz de rastrear clases, objetos, funciones, pérdidas de memoria, etc. Ejemplos a continuación, Documentos adjuntos.
¡Consíguelo!
!pip install line_profiler
!pip install memory_profiler
!pip install pympler
¡Cárgalo!
%load_ext line_profiler
%load_ext memory_profiler
Úsalo!
%hora
%time print('Outputs CPU time,Wall Clock time')
#CPU times: user 2 µs, sys: 0 ns, total: 2 µs Wall time: 5.96 µs
Da:
- Tiempos de CPU: tiempo de ejecución a nivel de CPU
- tiempos sys: tiempo de ejecución a nivel del sistema
- total: tiempo de CPU + tiempo del sistema
- Tiempo de pared: tiempo de reloj de pared
%cronométralo
%timeit -r 7 -n 1000 print('Outputs execution time of the snippet')
#1000 loops, best of 7: 7.46 ns per loop
- Da el mejor tiempo del número dado de ejecuciones (r) en bucles (n) veces.
- Detalles de salidas en el almacenamiento en caché del sistema:
- Cuando los fragmentos de código se ejecutan varias veces, el sistema almacena en caché algunas operaciones y no las ejecuta nuevamente, lo que puede dificultar la precisión de los informes de perfil.
% poda
%prun -s cumulative 'Code to profile'
Da:
- cantidad de llamadas a funciones (ncalls)
- tiene entradas por llamada de función (distinta)
- tiempo empleado por llamada (percall)
- tiempo transcurrido hasta esa llamada de función (cumtime)
- nombre del func / módulo llamado etc ...
% memit
%memit 'Code to profile'
#peak memory: 199.45 MiB, increment: 0.00 MiB
Da:
% lprun
#Example function
def fun():
for i in range(10):
print(i)
#Usage: %lprun <name_of_the_function> function
%lprun -f fun fun()
Da:
- Estadísticas sabias de línea
sys.getsizeof
sys.getsizeof('code to profile')
# 64 bytes
Devuelve el tamaño de un objeto en bytes.
asizeof () de pympler
from pympler import asizeof
obj = [1,2,("hey","ha"),3]
print(asizeof.asizeof(obj,stats=4))
pympler.asizeof se puede usar para investigar cuánta memoria consumen ciertos objetos de Python. A diferencia de sys.getsizeof, asizeof dimensiona objetos de forma recursiva
rastreador de pympler
from pympler import tracker
tr = tracker.SummaryTracker()
def fun():
li = [1,2,3]
di = {"ha":"haha","duh":"Umm"}
fun()
tr.print_diff()
Realiza un seguimiento de la vida útil de una función.
El paquete Pympler consta de una gran cantidad de funciones de alta utilidad para perfilar el código. Todo lo cual no puede ser cubierto aquí. Consulte la documentación adjunta para ver las implementaciones detalladas del perfil.
Pympler doc