Performance Profile erstellen
Verfasst: Montag 31. Juli 2023, 15:39
Hallo zusammen!
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:
Diese kann ich dann ja auch in PyCharm öffnen um es mit der Visualisierung etwas komfortabler zu haben; das Ganze sieht dann da so aus:

Ich bin nun vom Ergebnis sehr verwirrt; scheinbar mache ich da grundlegend etwas falsch:
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.
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.