Ich habe @work ein Python Script "geerbt", welches grundsätzlich tut was es soll und fehlerfrei funktioniert. Allerdings wurde ich gebeten mir das hinsichtlich Performance mal genauer anzuschauen, da es derzeit eine Laufzeit von etwas mehr als 3 Stunden hat (zuletzt: 3:10).
Wenn ich Scripte entwickle, dann tue ich das in der Regel mit PyCharm und nutze den eingebauten Profiler; scheinbar ist dieses intern und per default `yappi` oder `cProfiler`. Also habe ich auf dem entfernten System, auf welchem das Script jeden Tag 1x läuft, `yappi` installiert (da dieser scheinbar "multithreading aware" ist) und wie folgt eine PSTAT Datei damit erzeugt:
Code: Alles auswählen
python3 -m yappi -o run.pstat /code/main.py
Ich bin nun vom Ergebnis sehr verwirrt; scheinbar mache ich da grundlegend etwas falsch:
- Das Ganze beginnt mit `Thread.run` und nicht etwa mit `main.py` als Ausgangspunkt.
- Die "Total" Time ist "850308 milliseconds", was in etwa 14 Minuten und 10 Sekunden entspricht. Das Script läuft aber auf dem nicht gerade schwachen Host, wie gesagt, über 3 Stunden.
Leider gibt es aufgrund der Art und Menge der verwalteten Daten kein Testsystem davon ...
Ich hoffe ich konnte meine Fragen nachvollziehbar darstellen.
Wie kriege ich bei einer Threaded Applikationen ein Performance Profil erstellt in dem ich sehe, was genau da diese 3 Stunden braucht?
Meine Vermutung ist, das ein Großteil der Laufzeit einfach daher kommt, das die API des abgefragten Systems einfach seine Zeit braucht und "mein" Script daher recht lange auf Antworten warten lässt. Nur das würde ich gerne in einem Profiler-Ergebnis sehen und dokumentieren statt es nur zu vermuten. Auch, ob und wie häufig neue sessions aufgebaut werden müssen würde ich gerne auswerten.
Vielen Dank schonmal für alle Ideen und Feedbacks.