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?
Réponses
Trop de publicités?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
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.