J'ai été en utilisant cProfile pour le profil de mon code, et ça a été génial de travailler. J'utilise aussi gprof2dot.py pour visualiser les résultats (en fait un peu plus clair).
Cependant, cProfile (et la plupart des autres python profileurs j'ai vu jusqu'à présent) semblent uniquement de profil à la fonction-niveau d'appel. Cela provoque de la confusion lorsque certaines fonctions sont appelées à partir de différents endroits - je n'ai aucune idée si l'appel #1 ou composez le #2 est de prendre la majorité du temps. Cela devient encore pire lorsque la fonction en question est de 6 niveaux de profondeur, appelé à partir de 7 autres endroits.
Donc ma question est: comment puis-je obtenir une ligne-par-ligne de profilage? Au lieu de cela:
function #12, total time: 2.0s
J'aimerais voir quelque chose comme ceci:
function #12 (called from somefile.py:102) 0.5s
function #12 (called from main.py:12) 1.5s
cProfile ne montrent comment une grande partie de la durée totale des "transferts" de la mère, mais encore une fois cette connexion est perdue lorsque vous avez un tas de couches et interconnecté d'appels.
Idéalement, j'aimerais avoir une interface graphique, qui permettrait d'analyser les données, puis montrez-moi mon fichier source avec un temps total de donné à chaque ligne. Quelque chose comme ceci:
main.py:
a = 1 # 0.0s
result = func(a) # 0.4s
c = 1000 # 0.0s
result = func(c) # 5.0s
Puis je serais en mesure de cliquer sur le deuxième "func(c)" appeler pour voir ce qui prend du temps que dans l'appel, distincte de la "func ()" appel.
Cela fait-il sens? Est-il un profilage de la bibliothèque qui recueille ce type d'info? Est-il un outil génial que j'ai manqué? Tout commentaire est apprécié. Merci!!