Problema con l'uso del decoratore @profile

raponi.federico (11240 points)
2 4 21
asked Oct 24, 2020 in Programmare in Python by raponi.federico (11,240 points)
recategorized Oct 24, 2020 by andrea.sterbini

Ho riscontrato il seguente un problema durante i test con il @proflie all'interno di Spyder. 

Una volta avviato il test Profile By Line da Spyder, le funzione decorate dal @profile compaiono nell'output, ma i tempi non vengono calcolati, infatti risulta che ogni funzione abbia impiegato 0.000ms.

Ho implementato il @profile in questo modo:

import builtins
if 'profile' not in dir(builtins):
    def profile(X) : return X
@profile    
def funzione():
213 views

2 Answers

Best answer
Valerio Cucchiaro (1900 points)
1 2 9
answered Oct 24, 2020 by Valerio Cucchiaro (1,900 points)
selected Oct 24, 2020 by raponi.federico
Il profiler non funziona se nella funzione    if __name__ == "main"__     non sono presenti i dati con la chiamata di funzione di cui hai bisogno.
raponi.federico (11240 points)
2 4 21
commented Oct 24, 2020 by raponi.federico (11,240 points)
Grazie mille, ho risolto, infatti nel mio main avevo messo pass.
G
Giordano_Dionisi (3100 points)
12 38 58
commented Oct 24, 2020 by Giordano_Dionisi (3,100 points)
Ma come lo hai implementato il profiler ? Perchè a me tornerebbe un botto utile, dato che non passo solo gli ultimi due tests per il timeout, ma proprio su Spyder nella finestra a destra non ho il pulsante "profile" considera

Non so se sai come aiutarmi
L
Lorenzo Spataro (2710 points)
0 0 12
commented Oct 24, 2020 by Lorenzo Spataro (2,710 points)

Installalo dal prompt di anaconda con il comando: 

conda install spyder-line-profiler -c spyder-ide

Se già lo avessi fatto, recati su spyder, in alto dove ci stanno i menu a tendina vai su View > Panes e spunta Line profiler, oppure puoi provare cliccando sul menu a tendina Run e poi sulla dicitura "Profile line by line", questo però è il Line Profiler che ti calcola i tempi per ogni riga dopo il decoratore @profile, se vuoi  Profile segui la procedura che ti ho descritto prima e spunti Profiler

G
Giordano_Dionisi (3100 points)
12 38 58
commented Oct 24, 2020 by Giordano_Dionisi (3,100 points)
Okay okay ora ci sto finalmente, calcola non so come ringraziarti !!

Era proprio questo che cercavo, con il profiler line - by - line !!!

Grazie ancora infinitamente !!!!
L
Lorenzo Spataro (2710 points)
0 0 12
answered Oct 24, 2020 by Lorenzo Spataro (2,710 points)
Ciao federico, hai fatto qualche chiamata a funzione() ? Ho avuto il tuo stesso problema e mi sono accorto che non avevo fatto nessuna call alla funzione per cui non mi calcolava i tempi delle linee
raponi.federico (11240 points)
2 4 21
commented Oct 24, 2020 by raponi.federico (11,240 points)
Esattamente, nel  if __name__ == "main"__  : avevo inserito pass e quindi non calcolava nessun tempo. Inserendo i dati forniti nell'esempio tutto funziona correttamente.