Wo Python nicht die erste Wahl ist
Reine Geschwindigkeit und wo die Arbeit läuft
„Python ist langsam.“
Du wirst diesen Satz hören, als wäre damit die Diskussion beendet. Das ist sie nicht, und zwar nicht deshalb, weil er falsch wäre. Gewöhnlicher Python-Code kann tatsächlich viel langsamer sein als Sprachen, die der Maschine direktere Anweisungen geben.
Das Problem ist, dass der Satz für eine Sprachwahl zu vage ist. Ein langsamer Teil macht noch kein langsames Programm, und eine schnelle Berechnung macht noch kein reaktionsfreudiges Produkt.
Gib „schnell“ eine Zahl
Performance beschreibt, wie gut Software messbare Zeitanforderungen erfüllt. Nützliche Anforderungen klingen so: Den Bericht innerhalb von dreißig Sekunden vorbereiten; die meisten Anfragen in weniger als einer halben Sekunde beantworten; zehntausend Bilder bis zum Morgen verarbeiten.
„So schnell wie möglich“ hilft einem Team nicht, weil es nie sagt, wann Schluss ist. Mit einer konkreten Zahl kannst du entscheiden, wann du fertig bist.
Dann misst du das tatsächliche Programm. Der Programmteil, der die Zeit verbraucht, heißt Hotspot. Es geht darum, ihn zu finden, statt zu raten, denn das Bauchgefühl liegt hier bekanntlich oft daneben.
Wofür die Zeit meistens draufgeht
Gewöhnlicher Python-Code wiederholt etwas millionenfach. Ein Programm führt für jeden Punkt in einer riesigen Sammlung von Messwerten eine kleine Berechnung aus. Python muss bei jedem Durchgang seine eigenen flexiblen Regeln beachten. Dieser Zusatzaufwand ist einmal winzig und millionenfach verheerend.
Wenn die Zeit dafür draufgeht und das Projekt deutlich mehr Geschwindigkeit braucht, ist gewöhnlicher Python-Code für diesen Teil meist nicht die erste Wahl. Beachte, wie eng die Aussage gefasst ist. Niemand hat das ganze Programm verworfen. Du könntest das Verfahren ändern, sodass weniger Arbeit anfällt, eine optimierte Bibliothek aufrufen oder einen Abschnitt in eine schnellere Sprache verlagern.
Das Programm wartet. Ein Webdienst fragt Datensätze bei einer Datenbank an und wartet dann auf die Datenbank, das Netzwerk oder einen anderen Dienst. Ihn in einer schnelleren Sprache neu zu schreiben lässt die Datenbank nicht früher antworten. Python bleibt hier oft gut geeignet, und die Lösung sind meistens bessere oder weniger Abfragen.
Python bittet eine optimierte Bibliothek, die Arbeit zu erledigen. Das Muster aus der KI-Lektion. Wenn NumPy zwei riesige Gruppen von Zahlen addieren soll, findet die Wiederholung in dafür entwickeltem Code statt, nicht als Millionen einzelner Python-Schritte. Python bereitet die Anfrage vor, nimmt das Ergebnis entgegen und führt den Rest des Programms aus.
Python kann deshalb für den gesamten Arbeitsablauf gut geeignet sein, selbst wenn es eine schlechte Wahl wäre, die zentrale Berechnung selbst darin zu schreiben.
Ich habe hier bewusst keine Benchmark-Zahlen verwendet. Ein Wert, der auf einer bestimmten Maschine mit einer bestimmten Python-Version und einem bestimmten Beispiel gemessen wurde, kann ein anderes Projekt in die Irre führen. Übertragbar ist die Reihenfolge der Überlegungen: Sag, was du brauchst, miss das echte Programm, finde den Hotspot und entscheide dann, was du änderst.
Arbeit zu verlagern ist nicht kostenlos
Python lässt sich mit C, C++, Rust und weiteren Sprachen verbinden. Für einen anspruchsvollen Hotspot ist das eine echte Möglichkeit. Es entsteht aber auch eine Grenze, die jemand pflegen muss. Beide Seiten müssen sich darüber einig sein, was sie überquert, und der Code muss unter Umständen für jedes System getrennt gebaut werden.
Für einen wichtigen Hotspot lohnt sich das. Für ein Programm, das seine Anforderung bereits erfüllt, hast du dir damit Komplexität ohne Nutzen eingekauft.
Das ist ein weiterer Grund, warum es sich lohnt, Python zu kennen. Es kann eine große Rolle übernehmen und genau dort mit einem spezialisierteren Werkzeug zusammenarbeiten, wo die Anforderungen strenger werden.
Geschwindigkeit ist allerdings nicht die einzige Grenze. Manche Software muss mit viel weniger Arbeitsspeicher als ein Laptop auskommen oder viel näher an der Hardware arbeiten als Python. Darum geht es als Nächstes.