72 votes

Comment puis-je le profil d'un multithread programme en Python?

Je suis le développement d'une intrinsèquement multithread module en Python, et j'aimerais trouver d'où il passe son temps. cProfile ne semble profil le thread principal. Est-il possible de profilage de tous les threads de calcul?

44voto

sumercip Points 194

19voto

vartec Points 53382

Au lieu de courir un cProfile, vous pouvez exécuter séparé cProfile instance dans chaque thread, puis de combiner les stats. Stats.add() le fait automatiquement.

6voto

DNS Points 17577

Si vous êtes d'accord pour faire un peu de travail supplémentaire, vous pouvez écrire votre propre profilage classe qui implémente profile(self, frame, event, arg). Qui est appelée à chaque fois qu'une fonction est appelée, et vous pouvez assez facilement mis en place une structure pour recueillir des statistiques qui.

Vous pouvez ensuite utiliser threading.setprofile de registre que la fonction de chaque fil. Lorsque la fonction est appelée, vous pouvez utiliser threading.currentThread() pour voir qui il est en cours d'exécution sur. Plus d'informations (et de prêt-à-run recette) ici:

http://code.activestate.com/recipes/465831/

http://docs.python.org/library/threading.html#threading.setprofile

2voto

Walter Points 3584

Étant donné que vos différentes tâches principales fonctions de différent, vous pouvez utiliser le très utile profile_func() décorateur à partir d' ici.

-6voto

Gambrinus Points 1738

Je ne sais pas tout de profilage-application qui prend en charge une telle chose pour python - mais Vous pourriez écrire une Trace de classe qui écrit des fichiers log où vous avez mis dans l'information d'lorsqu'une opération est commencé et quand il a fini et combien de temps est-elle consommée.

C'est une solution simple et rapide pour votre problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X