709
25.6
Tuning
25.6.3 Performance-Analyse und Tuning
Das Skript aus dem letzten Abschnitt arbeitet vollkommen korrekt, aber es enthält Imple-
mentierungsschwächen – ungeschickt programmierte Passagen –, die unnötigerweise die
Laufzeit verschlechtern. Solche Schwachpunkte können durch eine Analyse des Perfor-
manceberichtes des Profilers leicht aufgespürt werden. Wenn Sie die Moduldatei direkt
(z.B. von IDLE aus) starten, wird die letzte Anweisung ausgeführt und ein Objekt der
Klasse
Sky unter der Kontrolle des Profilers instanziiert. Das folgende Listing zeigt einen
Ausschnitt aus der Bildschirmausgabe.
Wir entnehmen dem Bericht folgende Erkenntnisse:
Die gesamte Generierung eines
Sky-Objektes aus einem Foto kostet 5.484 CPU-Sekunden.
Bei der Bearbeitung des Fotos werden alle Pixel abgetastet und ihre Helligkeit bewertet.
Dabei wird
65322 Mal die get()-Methode des PhotoImage-Objektes aufgerufen. Das allein
kostet in der Summe
2.438 Sekunden. Leider können wir an dieser Stelle nichts verbessern.
Denn wir sind auf die
get()-Methode angewiesen und es muss wirklich jedes der 65322
Pixel befragt werden. Hinweis: Bei der Verarbeitung großer Bilder sollte man Funktionen
des Moduls NumPy verwenden (siehe Kapitel 30).
Ein »dicker Brocken« ist die Berechnung der Helligkeit der Bildpunkte.
1.016 Sekunden
werden dafür verwendet. Was macht die Methode
__brightness() so langsam?
198072 function calls in 5.484 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
324 0.000 0.000 0.000 0.000 :0(append)
65665 1.469 0.000 1.469 0.000 :0(call)
1 0.000 0.000 5.469 5.469 :0(exec)
343 0.016 0.000 0.016 0.000 :0(getint)
1 0.016 0.016 0.016 0.016 :0(setprofile)
1 0.000 0.000 5.469 5.469 <string>:1(<module>)
342 0.000 0.000 0.016 0.000 __init__.py:3375(height)
1 0.000 0.000 0.000 0.000 __init__.py:3382(width)
65322 0.969 0.000 2.438 0.000 __init__.py:3428(get)
0 0.000 0.000 profile:0(profiler)
1 0.000 0.000 5.484 5.484 profile:0(stars = Sky(image))
7 0.000 0.000 0.000 0.000 stars.py:13(__init__)
577 0.031 0.000 0.031 0.000 stars.py:16(integrate)
1 0.000 0.000 5.469 5.469 stars.py:27(__init__)
65322 1.016 0.000 1.016 0.000 stars.py:33(__brightness)
1 0.000 0.000 0.031 0.031 stars.py:39(__createStars)
162 0.000 0.000 0.031 0.000 stars.py:44(__integrate)
1 1.969 1.969 5.438 5.438 stars.py:49(__search)

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.