Ich habe eine Testsuite und Code es testet. Wenn ich from memory_profiler import profile
auf die Oberseiten der entsprechenden Dateien setze, dekoriere die Funktionen, die ich mit @profile
profiliert habe, und laufe in der Standardweise mit python TestThing.py
, bekomme ich große Zeile-für-Zeile-Ergebnisse.Wie kann ich Unittests in Python zeitlich planen?
Aber line_profiler kommt auf diese Weise nicht in einem Paket, und die einzige Möglichkeit, die ich damit profilieren konnte, ist mit kernprof -l -v thing.py
. Wenn ich es bei meinen Komponententests verwende, wird keiner der Tests ausgeführt (nicht wirklich überraschend), und es werden keine Ergebnisse generiert. Wie kann ich meine Tests und den von ihnen verwendeten Code analog zu memory_profiler zeitlich abbilden?
Eine Modifikation dieses arbeitet: import line_profiler, erklären dann eine statische Profiler = line_profiler.LineProfiler für die Klasse. Dann dekoriere Funktionen mit @profiler. Rufen Sie dann an den Enden dieser Funktionen ClassName.profiler.dump_stats ('method.lprof') auf. Dann lies sie mit python -m line_profiler method.lprof. Aber ist das nicht albern? Ich möchte meinem Code nicht so viele Zeilen hinzufügen, die ich später entfernen muss. Gibt es einen saubereren Weg? – pvlkmrv
welcher Teil ist nicht sauber? – georgexsh
Für memory_profiler muss ich ein Objekt nicht instanziieren oder habe Bedenken, die Methode dump_stats einige Zeit nach dem Ausführen einer profilierten Funktion aufzurufen. Ich kann mit dieser Methode der Zeitprofilierung arbeiten, aber es ist mehr Arbeit, als es sein muss. – pvlkmrv