Question

Je n'ai pas été capable de trouver ce partout en ligne. Je cherchais à savoir l'aide d'un profileur comment mieux optimiser mon code, et lors du tri par lequel les fonctions consomment de façon cumulative la plupart du temps, des choses comme str (), impression, et d'autres fonctions similaires largement utilisées manger une grande partie du profil. Quelle est la meilleure façon de profiler un programme Python pour obtenir les fonctions définies par l'utilisateur que pour voir quels sont les domaines de leur code, ils peuvent optimiser?

J'espère que le bon sens, toute la lumière, vous pouvez jeter sur ce sujet serait très apprécié.

Était-ce utile?

La solution

OK, je suppose que votre réel Le but est de rendre votre code aussi vite que possible, non?

Il est naturel de supposer que vous faites cela en trouvant combien de temps vos fonctions prennent, mais il y a une autre façon de le regarder.

Considérez que votre programme fonctionne, il trace un arbre d'appel, ce qui est un peu comme un vrai arbre en dehors de votre fenêtre. Le tronc est comme la fonction main, et où une branche se sépare de celui-ci est comme appeler une autre fonction.

Supposons que chaque « feuille » prend un certain temps, et ce que vous voulez faire est élaguer l'arbre de manière à éliminer autant de feuilles que possible.

Une façon est de trouver des branches avec beaucoup de feuilles et couper les feuilles. Une autre façon est de couper des branches entières si vous ne les avez pas besoin. Le problème est de trouver des branches lourdes que vous n'avez pas besoin.

Une façon d'os simple est de choisir plusieurs feuilles au hasard, comme 10, et sur chacun d'eux, tracer une ligne vers le bas de sa branche tout le dos de chemin vers le tronc. Tout point de branchement aura un certain nombre de ces lignes qui le traversent, de la feuille au tronc. Plus les lignes passent par ce point de branche, les feuilles sont plus sur cette branche, et plus vous pourriez économiser par la taille, il.

Voici comment vous pouvez appliquer à votre programme. Pour déguster une feuille, vous mettez en pause le programme au hasard et regardez la pile d'appels. C'est l'arrière de la ligne du tronc. Chaque site d'appel sur elle (ne fonctionne pas, le site d'appel) est un point de branchement. Si ce site d'appel est sur une fraction des échantillons, comme 40%, alors qui est à peu près combien vous pourriez économiser par la taille, il.

Alors, ne pense pas comme mesure de la façon dont les fonctions prennent longues. Pensez-y comme demander quels sites sont appel « lourds ». C'est tout ce qu'il ya à faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top