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
risposta
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!
Il mio sistema è un server web, se utilizzo 'pr = cProfile.Profile() 'in diverse richieste, è così chiamato ** istanze separate di cProfile **? – user3978288
- 1. Generatori di profili Python
- 2. Creazione di profili di una dinamica pinvoke
- 3. Strumento di creazione profili per Clojure?
- 4. Creazione di profili su rubini/rubini sull'applicazione di rotaie
- 5. Creazione di profili di un'applicazione Java in Eclipse? (plug-in)
- 6. Creazione di profili di un'applicazione framework Play (2.0.2) tramite VisualVM
- 7. Creazione di una libreria C thread-thread
- 8. Creazione di profili di un programma python con PyCharm (o qualsiasi altro IDE)
- 9. Overhead creazione di thread Java
- 10. Creazione di shared_ptr senza thread
- 11. Creazione di più profili Maven per un singolo lavoro Jenkins
- 12. Denominazione AsyncTask per la creazione di profili in Android
- 13. Ho bisogno di pensieri sulla creazione di profili di multi-threading in C su Linux
- 14. Uso di creazione di un thread estendendo una classe Thread
- 15. Creazione istantanea di thread di un singleton
- 16. Creazione di profili con prestazioni di multithreading in un programma Haskell - nessuna accelerazione utilizzando strategie parallele
- 17. Creazione di callback con thread in XS
- 18. creazione di oggetti locali thread su scala
- 19. Listener creazione thread
- 20. Creazione di profili di un'app di Google App Engine di Google
- 21. Creazione di profili di un progetto C++ in termini di tempo di esecuzione
- 22. Creazione di un modulo python
- 23. Creazione di SVG usando Python
- 24. Creazione di una discussione in python
- 25. Profili di prestazioni su Linux
- 26. Python, thread e gobject
- 27. Creazione di un oggetto non thread-thread per thread e utilizzo della garanzia before-before
- 28. Frustrazione di ThreadPool - Creazione di thread superiore a SetMaxThreads
- 29. Creazione di boost :: thread con un'istanza di std :: shared_ptr object
- 30. Creazione di un pool di thread dinamico (crescente/restringente)
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
Come nota non correlata, potresti prendere in considerazione più processi anziché più thread: http://en.wikipedia.org/wiki/Global_Interpreter_Lock – badp