Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Come usare line-profiler?

Alexis (1440 points)
8 14 18
in HW4 obbligatorio by (1.4k 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?

367 views
closed

3 Answers

Best answer
O
Oakandrew (6400 points)
7 27 64
by (6.4k points)
selected by
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)
8 14 18
by (1.4k 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)
7 27 64
by (6.4k 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)
8 14 18
by (1.4k 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)
7 27 64
by (6.4k points)
edited by

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)
8 14 18
by (1.4k points)

Ok grazie mille ha funzionato angel

andrea_25 (6070 points)
2 2 24
by (6.1k 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
by (560 points)
edited by
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