2017-10-02 5 views
0

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?

Antwort

0

Natürlich könnten Sie import line_profiler:

import line_profiler 

profiler = line_profiler.LineProfiler() 


@profiler 
def foo(): 
    for i in range(10): 
     print(i) 


foo() 

profiler.dump_stats('foo.lprof') 

Ergebnis in foo.lprof gespeichert.

oder Sie eine memory_profiler wie Dekorateur wickeln konnte, Druckergebnis nach dem Aufruf:

def profile_and_show(func): 
    profiler = line_profiler.LineProfiler(func) 
    def _(*args, **kwargs): 
     try: 
      return func(*args, **kwargs) 
     finally: 
      lstats = profiler.get_stats() 
      line_profiler.show_text(lstats.timings, lstats.unit) 
    return _ 
+0

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

+0

welcher Teil ist nicht sauber? – georgexsh

+0

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

Verwandte Themen