Wie benutze ich line_profiler (von Robert Kern)?

10

Ich habe versucht, mit dem line_profiler-Modul ein zeilenweises Profil über eine Python-Datei zu erhalten. Das habe ich bisher gemacht:

1) Installierter line_profiler von pypi mit der .exe Datei (ich bin auf WinXP und Win7). Klicken Sie einfach durch den Installationsassistenten.

2) Ein kleines Stück Code geschrieben (ähnlich dem, was in einer anderen beantworteten Frage gestellt wurde) hier ).

%Vor%

3) Führen Sie den Code von IDLE / PyScripter aus. Ich habe nur die Zeit.

%Vor%

Wie bekomme ich ein vollständiges zeilenweises Profil über den Code, den ich ausführe? Ich habe noch nie fortgeschrittene Python-Funktionen wie Dekoratoren verwendet, daher ist es für mich schwierig zu verstehen, wie ich die Richtlinien verwenden soll, die von verschiedenen Beiträgen wie hier und hier .

    
Alex Tereshenkov 27.05.2014, 09:00
quelle

2 Antworten

7

Folgen Sie einfach dem Beispiel von Dan Riti vom ersten Link , aber verwenden Sie Ihren Code. Alles, was Sie nach der Installation des line_profiler -Moduls tun müssen, ist, fügen Sie einen @profile Decorator direkt vor jeder Funktion, die Sie zeilenweise profilieren möchten, hinzu und stellen Sie sicher, dass jeder mindestens einmal irgendwo anders im Code aufgerufen wird - also für Ihr trivialer Beispielcode, der ungefähr so ​​aussehen würde:

example.py datei:

%Vor%

Nachdem Sie das getan haben, führen Sie Ihr Skript über das kernprof.py aus, das in Ihrem C:\Python27\Scripts -Verzeichnis installiert wurde. Hier ist die (nicht sehr interessante) tatsächliche Ausgabe davon in einer Windows 7-Befehlszeilensitzung:

%Vor%

Wahrscheinlich müssen Sie diesen letzten Schritt anpassen - das Ausführen Ihres Testskripts mit kernprof.py anstatt direkt mit dem Python-Interpreter -, um das Äquivalent von IDLE oder PyScripter aus auszuführen.

Aktualisieren

Es sieht so aus, dass in line_profiler v1.0 das Dienstprogramm kernprof als ausführbare Datei und nicht als .py -Datei verteilt ist, so wie ich es bei der obigen Beschreibung getan habe. Dies bedeutet, dass Folgendes verwendet werden muss, um es über die Befehlszeile aufzurufen:

%Vor%     
martineau 27.05.2014, 12:01
quelle
14

Diese Antwort ist eine Kopie meiner Antwort hier , um line_profiler statistics aus einem Python-Skript zu erhalten ( ohne kernprof von der Befehlszeile zu verwenden oder @profile decorators zu Funktionen und Klassenmethoden hinzuzufügen). Alle Antworten (die ich gesehen habe) zu ähnlichen line_profiler -Fragen beschreiben nur die Verwendung von kernprof .

Die line_profiler Testfälle (gefunden auf GitHub ) haben eine Beispiel für das Generieren von Profildaten aus einem Python-Skript. Sie müssen die Funktion, die Sie profilieren möchten, umbrechen und dann den Wrapper aufrufen, indem Sie alle gewünschten Funktionsargumente übergeben.

%Vor%

Ausgabe:

%Vor%

Hinzufügen zusätzlicher Funktionen zum Profil

Sie können auch zusätzliche Funktionen hinzufügen, die ebenfalls profiliert werden sollen. Wenn Sie zum Beispiel eine zweite Funktion namens haben und Sie nur die aufrufende Funktion umschließen, sehen Sie nur die Profilergebnisse von aufrufen Funktion.

%Vor%

Das obige würde nur die folgende Profilausgabe für die aufrufende Funktion erzeugen:

%Vor%

In diesem Fall können Sie die zusätzliche Funktion namens zu einem Profil wie diesem hinzufügen:

%Vor%

Ausgabe:

%Vor%

HINWEIS: Das Hinzufügen von Funktionen zum Profil auf diese Weise erfordert keine Änderungen am profilierten Code (d. h., es müssen keine @profile Decorators hinzugefügt werden).

    
tdube 12.04.2017 19:06
quelle