Frage

Ich habe diese überall zu finden, Online nicht in der Lage gewesen. Ich war auf der Suche einen Profiler, um herauszufinden, mit, wie man besser meinen Code optimieren und bei der Sortierung durch die Funktionen kumulativ die meiste Zeit aufbrauchen, Dinge wie str (), Drucken und andere ähnliche weit verbreitet Funktionen essen viel des Profils auf. Was ist der beste Weg, um ein Python-Programms zum Profil nur die benutzerdefinierten Funktionen zu erhalten, um zu sehen, welche Bereiche ihres Codes können sie optimieren?

Ich hoffe, das macht Sinn, jedes Licht, das Sie zu diesem Thema vergießen würde sehr geschätzt werden.

War es hilfreich?

Lösung

OK, ich nehme an, Ihre real Ziel ist Ihren Code so schnell wie vernünftigerweise möglich zu machen, nicht wahr?

Es ist natürlich, Sie tun, um davon ausgehen, dass durch herauszufinden, wie lange Ihre Funktionen übernehmen, aber es ist eine andere Art und Weise zu sehen, es.

Betrachten wir als Ihr Programm läuft es verfolgt einen Anruf Baum aus, der vor dem Fenster ein bisschen wie ein echter Baum ist. Der Stamm ist wie die main Funktion, und wo jeder Zweig davon abspaltet ist wie eine andere Funktion aufrufen.

Angenommen, jedes „Blatt“ dauert eine gewisse Zeit, und was Sie tun möchten, ist Prune der Baum , um so viele Blätter wie möglich zu entfernen.

Eine Möglichkeit ist, Äste mit vielen Blättern zu finden und die Blätter abgeschnitten. Ein anderer Weg ist ganzen Zweig abzuschneiden, wenn Sie sie nicht brauchen. Das Problem ist, schwere Äste zu finden, dass Sie nicht brauchen.

Ein Knochen-einfache Möglichkeit, dies zu tun ist, mehrere Blätter zufällig zu holen, wie 10, und auf jeden, Spuren eine Linie in seiner Branche den ganzen Weg zum Stamm zurück. Jeder Verzweigungspunkt wird eine gewisse Anzahl dieser Linien durchzogen ist, von Blatt zu Stamm. Je mehr Linien laufen durch diesen Verzweigungspunkt, desto mehr Blätter auf dem Zweig, und je mehr man durch Beschneiden sie retten konnte.

Hier ist, wie Sie diese in Ihr Programm anwenden können. ein Blatt probieren Sie das Programm nach dem Zufallsprinzip unterbrechen und dem Call-Stack sehen. Das ist die Linie an der Stamm zurück. Jedes Aufrufort auf sie (nicht funktionieren, Aufrufort) ist ein Verzweigungspunkt. Wenn das Aufrufort auf einen Bruchteil Proben ist, wie 40%, dann die grob ist, wie viel Sie durch Beschneiden sie retten konnte.

Also, denken Sie nicht davon, wie die Messung, wie lange Funktionen übernehmen. Denken Sie daran, wie die Frage, welche Aufrufstellen sind „schwer“. Das ist alles, was es ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top