2015-10-03 25 views
6

Sto eseguendo un programma python relativamente complesso e in esso esiste una simulazione montecarlo che occupa la maggior parte del tempo. Mi piacerebbe scoprire quale parte di esso utilizza la maggior parte delle risorse, quindi posso potenzialmente renderla più veloce.Creazione di profili di un programma python con PyCharm (o qualsiasi altro IDE)

Sto usando PyCharm Professional edition e ho provato a utilizzare il profiler, ma il risultato è solo una lunga lista di funzioni irrilevanti di cui non ho mai sentito parlare.

Domande: C'è un buon profiler che posso usare che fornisce risultati significativi in ​​modo da poter vedere quale funzione o parola chiave utilizza la maggior parte delle risorse nella mia simulazione montecarlo?

+1

Non passare molto tempo senza provare [* questo *] (http://stackoverflow.com/a/4299378/23771). Non costa nulla ed è sorprendentemente efficace nel dirti cosa ci vuole tempo. –

risposta

6

A seconda delle esigenze e della versione di Python, forse si desidera utilizzare qualcosa come hotshot. https://docs.python.org/2/library/hotshot.html

EDIT:

per Python 3.4 Cprofile è probabilmente una delle migliori opzioni che avete a disposizione, ma sarà sicuramente per filtrare i risultati con grep/sed/awk per essere in grado di ottenere i risultati rilevanti, soprattutto se si utilizzare le librerie importate dove si verificano molte chiamate interne.

Mi piace l'ordinamento per numero di chiamate: python -m cProfile -s 'calls' <your_program>.py

Ora la questione in python3 con che metodo è il numero di chiamate primitive che verrà visualizzato se Cprofile viene chiamato dall'esterno, in modo da correre internamente è probabilmente una migliore idea:

import cProfile 

pr = cProfile.Profile() 
pr.enable() 
your_function_call() 
pr.disable() 
# after your program ends 
pr.print_stats(sort="calls") 
+0

Sto usando Python 3.4. – Nickpick

+0

Ho modificato la mia risposta per Python3. – shafeen

3

Nota: Come già detto nei commenti, si applica quanto segue alla versione a pagamento di PyCharm:

Se si utilizza 3.x (non so su 2.x), io aggiungi a shafee La risposta di n e renderla più specifica per PyCharm come nel post originale. Questo funziona anche meglio per applicazioni web o applicazioni più grandi rispetto a semplici programmi a riga di comando in cui la stampa dell'output su stdout potrebbe essere ok (ancora meglio essere in grado di ordinare modi diversi attraverso il visualizzatore di PyCharm).

Effettivamente, fare come suggerito dall'istanza del profilo e abilitare e disabilitare in base alle esigenze. Per renderlo utile, vorrai salvarlo su un file.

  • In una sezione esterna del codice, creare un profilo.
  • Nella sezione interna del codice, eseguire la profilazione.
  • Ora, chiamare pr.dump_stats ('profile.pstat')

Si dispone ora di un file di profilo che si desidera esaminare. Vai a Strumenti | Apri snapshot CProfile. Seleziona profile.pstat e ora puoi visualizzare e ordinare per titoli diversi come desiderato.

Sommario

import cProfile as profile 

# In outer section of code 
pr = profile.Profile() 
pr.disable() 

# In section you want to profile 
pr.enable() 
# code of interest 
pr.disable() 

# Back in outer section of code 
pr.dump_stats('profile.pstat') 

Aprire il file nel visualizzatore di Cprofile PyCharm.

+2

Sfortunatamente il plugin del profiler è nell'edizione Professional (non libera) di PyCharm. – user1735003