2010-02-07 13 views
9

Sto cercando di capire come misurare le prestazioni di diversi thread python nella mia applicazione. Al momento ho diverse attività che sono in esecuzione su thread diversi in base all'input dell'utente e vorrei misurare il tempo di esecuzione, forse anche il consumo di memoria di ciascuno dei thread. Ho provato a utilizzare cProfile (su ogni istanza del thread, quindi vorrei scrivere i dati su un file e quindi aggregare tutti i risultati) con un successo limitato. Inoltre, ho un ulteriore problema di avere qualche IO di blocco che sta distorcendo i miei risultati. Esiste comunque un profilo efficace della mia domanda?Creazione di profili di thread Python

+1

Utilizzando cProfile, hai fatto un ottimo inizio! Se potresti spiegare un po 'di più sul tuo "successo limitato" con cProfile, probabilmente potremmo aiutarti a risolverlo e continuare da lì. – KushalP

+0

Come nota non correlata, potresti prendere in considerazione più processi anziché più thread: http://en.wikipedia.org/wiki/Global_Interpreter_Lock – badp

risposta

3

Ci sono diversi modi per affrontare questo problema. cProfile è ottimo e viene fornito con Python, tuttavia molte persone vedono il profiling multi-thread come un problema. Un modo per aggirare questo è eseguire istanze separate di cProfile per ogni thread e quindi combinare i risultati usando Stats.add.

Se non fosse utile come speravi, un'altra alternativa potrebbe essere quella di utilizzare Yappi, che ho avuto successo utilizzando per alcuni casi speciali multi-thread. Ha un'ottima documentazione, quindi non dovresti avere troppi problemi a configurarlo.

Per la profilatura specifica della memoria, vedere Heapy. Ma attenzione, potrebbe creare alcuni dei file di registro più grandi che tu abbia mai visto se il tuo codice è sbagliato!

+0

Il mio sistema è un server web, se utilizzo 'pr = cProfile.Profile() 'in diverse richieste, è così chiamato ** istanze separate di cProfile **? – user3978288

Problemi correlati