Do you need any help?

Come usare line-profiler?

Alexis (1440 points)
6 14 18
asked Nov 19, 2020 in HW4 obbligatorio by Alexis (1,440 points)

Scusate per la domanda un po' banale ma non saprei come utilizzare il line profiler e il profiler per controllare quale per parte del codice impiega più tempo.

Ho già controllato se c'erano dei post al riguardo precedenti come "Dubbi sull'utilzzo di spyder-line-profiler" ma non credo di aver capito come far funzionare il line profiler, anche se aggiungo la decorazione @profile ad ogni funzione il profiler rimane comunque vuoto. Dove sto sbagliando?

3 Answers

Best answer
O
Oakandrew (6400 points)
4 26 63
answered Nov 19, 2020 by Oakandrew (6,400 points)
selected Nov 19, 2020 by Alexis
Salve.

Hai messo chiamata di funzione in "if __name__=='__main__'"?

e dopo hai clickato shift + f10 per fare "profile line by line"?
Alexis (1440 points)
6 14 18
commented Nov 19, 2020 by Alexis (1,440 points)
Hai ragione, non avevo notato che non ce l'avevo messa 'if __name__ == "__main__"'
Adesso vedo che il line profiler riconosce che ci sono delle funzioni decorate da @profile, ma da comunque tempo zero.

Sotto name==main cosa ci dovrei mettere? "pass"?
O
Oakandrew (6400 points)
4 26 63
commented Nov 19, 2020 by Oakandrew (6,400 points)
puoi mettere anche senza pass, è importante chiamare funzione dentro "__main__" e mettere decoratore sopra nomi di funzioni, che poi chiami in __main__
Alexis (1440 points)
6 14 18
commented Nov 19, 2020 by Alexis (1,440 points)
Ah intendi che devo mettere tutta/e la funzione/i dentro main invece che dentro ex1?

Oppure che devo solo richiamare quelle che mi servono?
O
Oakandrew (6400 points)
4 26 63
commented Nov 19, 2020 by Oakandrew (6,400 points)
edited Nov 19, 2020 by Oakandrew

Tutto questo puoi fare se prima hai eseguito:

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

hai funzioni: funzione1,funzione2, funzione3.

sopra questi nomi(definizioni di questi funzioni) scrivi "@profile".

esempio:

@profile

funzione1(parametri) :

 corpo di funzione

in if __name__=='__main__'  dovresti chiamare queste funzioni(cioe potresti chiamare anche una sola, se questa chiama tutte le altre). Poi dovresti avere una finestrina "Profiler"  sopra console di output in menu("Variable Explorer","File","Profiler",ecc.) lo devi cliccare quando esegui "profile line by line"  dopo aver clickato tendina "Run".

Alexis (1440 points)
6 14 18
commented Nov 19, 2020 by Alexis (1,440 points)

Ok grazie mille ha funzionato angel

andrea_25 (6070 points)
2 2 24
answered Nov 19, 2020 by andrea_25 (6,070 points)
Se hai già seguito tutte le altre indicazioni, dopo aver messo il decoratore @profile prima della funzione che ti interessa esaminare, salva il file.

Dopo, su spyder, vai sulla finestra sopra la console e apri il line profiler, assicurati di selezionare in alto il path corretto del file.py che ti interessa e successivamente premi il comando accanto per avviare il line profiler.
d
digiorgioalessio (560 points)
0 0 3
answered Nov 19, 2020 by digiorgioalessio (560 points)
edited Nov 19, 2020 by digiorgioalessio
Per far funzionare il line-profilar devi prima installarlo dall'anaconda prompt (qt-console se hai Mac), una volta installato, dopo aver riavviato il kernel, basta mettere una linea di codice davanti a tutto il programma:

import builtins
if 'profile' not in dir(builtins):
    def profile(X) : return X

dopodichè subito prima della funzione metti @profile. Se vuoi eseguirlo sul programma da inviare devi dare il test da : if __name__ == '__main__':.

per chiamare una funzione nel main basta che dopo la stringa, scritta nella riga sopra, richiami la funzione. Ad esempio nell'hw4 devi mettere: ex1("nome del test che vuoi eseguire")

per vedere i tuoi risultati vai su "run"  --> "profile line by line", ogni volta che modifichi il codice lo devi salvare: "profile line by line" non ti salva il codice in automatico

ps: devi mettere il @profile prima di ogni funzione che vuoi controllare