Veröffentlicht am: 03.05.2018
Von: JLusiardi
In Kategorie: Programmieren
Schlagwörter: github Kommandozeile Python
Auf GitHub habe ich in einem Issue die Anfrage bekommen, die Software sei langsam. Ja, gefühlt ist die Software nicht die schnellste. Aber wie langsam genau? Und für die Optimierung wichtiger, wo geht die Zeit verloren?
Das kann mit Profiling herausfinden. Ich will hier eine Lösung beschreiben, die ich für elegant und schnell halte, wobei es sich besseres/schöneres/... gibt.
Zunächst installiert man gprof2dot und dot:
pip3 install --user gprof2dot
sudo apt install dot
python3 bietet mit cProfile bereits ein Modul an, welches das Profiling eines Python-Skripts übernimmt. Mit folgendem Kommando startet man das Profilen des Skripts put_characteristic.py (mit dessen Parametern). Für das Module cProfile wird nur der Parameter -o genutzt, der die Ausgabedatei festlegt.
python3 -m cProfile -o profile.pstats homekit/put_characteristic.py -f koogeek.json -c 1.8 -v false
Anschließend verwendet man gprof2dot und dot um eine mehr oder weniger übersichtliche Grafik zu erzeugen, welche aufzeigt, wo die meiste Zeit "liegen bleibt".
gprof2dot -f pstats profile.pstats | dot -Tpng -o profile.png
Das Ergebnis sieht in unserem Beispiel wie folgt aus:
Ergebnis eines Profilinglaufs
Allerdings muss man auch hier berücksichtigen, dass die Ergebnisse eines einzelnen Laufs nicht repräsentativ sind. Hier sollten mehrere Durchläufe hintereinander geprofiled werden. Allerdings kann man auch bei einem Durchlauf erkennen, das hier Zeroconf zum Auffinden des HomeKit Geräts und das Erstellen der Sessionkeys viel Zeit verbrauchen.