Per ottenere statistiche rapide del profilo su un notebook IPython. Si può incorporare line_profiler e memory_profiler direttamente nei loro notebook.
Un altro pacchetto utile è Pympler . È un potente pacchetto di profilazione in grado di tracciare classi, oggetti, funzioni, perdite di memoria ecc. Esempi di seguito, Documenti allegati.
Prendilo!
!pip install line_profiler
!pip install memory_profiler
!pip install pympler
Caricalo!
%load_ext line_profiler
%load_ext memory_profiler
Usalo!
%tempo
%time print('Outputs CPU time,Wall Clock time')
#CPU times: user 2 µs, sys: 0 ns, total: 2 µs Wall time: 5.96 µs
dà:
- Tempi CPU: tempo di esecuzione a livello di CPU
- sys times: tempo di esecuzione a livello di sistema
- totale: tempo CPU + tempo di sistema
- Tempo della parete: orologio della parete
% timeit
%timeit -r 7 -n 1000 print('Outputs execution time of the snippet')
#1000 loops, best of 7: 7.46 ns per loop
- Fornisce il miglior tempo per il dato numero di corse (r) in loop (n) volte.
- Visualizza i dettagli sulla memorizzazione nella cache del sistema:
- Quando gli snippet di codice vengono eseguiti più volte, il sistema memorizza nella cache alcune opzioni e non le esegue di nuovo, il che può ostacolare l'accuratezza dei report del profilo.
% Prun
%prun -s cumulative 'Code to profile'
dà:
- numero di chiamate di funzione (chiamate)
- ha voci per chiamata di funzione (distinto)
- tempo impiegato per chiamata (percall)
- tempo trascorso fino a quella chiamata di funzione (cumtime)
- nome del modulo / funzione chiamato ecc ...
% MEMIT
%memit 'Code to profile'
#peak memory: 199.45 MiB, increment: 0.00 MiB
dà:
% lprun
#Example function
def fun():
for i in range(10):
print(i)
#Usage: %lprun <name_of_the_function> function
%lprun -f fun fun()
dà:
sys.getsizeof
sys.getsizeof('code to profile')
# 64 bytes
Restituisce la dimensione di un oggetto in byte.
asizeof () dal pympler
from pympler import asizeof
obj = [1,2,("hey","ha"),3]
print(asizeof.asizeof(obj,stats=4))
pympler.asizeof può essere usato per studiare quanta memoria consumano determinati oggetti Python. A differenza di sys.getsizeof, asizeof ridimensiona gli oggetti in modo ricorsivo
tracker dal pympler
from pympler import tracker
tr = tracker.SummaryTracker()
def fun():
li = [1,2,3]
di = {"ha":"haha","duh":"Umm"}
fun()
tr.print_diff()
Tiene traccia della durata di una funzione.
Il pacchetto Pympler è costituito da un numero enorme di funzioni di utilità elevata per la profilatura del codice. Tutto ciò non può essere trattato qui. Vedere la documentazione allegata per implementazioni di profili dettagliati.
Pympler doc