Redirected from page "Python performance"

Clear message
Python Performance

Vorab

Schnell kommen Fragen auf wie:

Zu Anfang sollte man sich überhaupt keine Gedanken zum Thema Geschwindigkeit machen. Dies wird als "premature optimization" bezeichnet und ist nicht zu empfehlen, da man möglicherweise ganz an der falschen Stelle optimiert. In erster Linie sollte man sauber, aufgeräumt und somit leserlich programmieren.

Natürlich sollte man von vornherein versuchen, Algorithmen so effektiv wie möglich zu gestalten, soweit dies eben möglich ist, ohne dass sie zu komplex werden.

Erst wenn es wirklich zu Performance-Problemen kommt, kann man sich Gedanken über die Optimierung machen.

Wie optimieren?

Am Anfang sollte man sich auf die Suche machen, wo es denn überhaupt zu Perfomanceproblemen kommt. Oft gibt es irgendwo einen Flaschenhals, den es ausfindig zu machen gilt. Ist dieser gefunden, sollte man überlegen, wie man ihn beseitigen kann. Meist reicht es dazu, den Algorithmus umzuschreiben. Erst wenn das wirklich nichts hilft, kann man zu anderen Mitteln greifen, die in den folgenden Abschnitten erläutert werden.

Ein Ansatz ist es, die relevanten Teile des Codes in ein C-Erweiterungsmodul auszulagern oder JIT-Compiler zu benutzen. Hierzu gibt es bereits jetzt mehrere Lösungen:

Psyco, der Python specializing compiler, kompiliert zur Laufzeit Python-Code zu Maschinenanweisungen für Intels x86-Architektur und erlaubt somit unter gewissen Bedingungen Python-Code, genauso schnell zu sein wie äquivalenter C-Code. Psyco ist im Endeffekt ein JIT-Compiler.

Des weiteren steht Pyrex zur Verfügung, um C-Extensions für Python in einer Untermenge der Python-Syntax zu schreiben. Hierbei entsteht nach einem Aufruf des Pyrex-Compilers aus einem PYX-File ein C-File, welches dann mittels eines C-Compilers zu einem Extension-Modul für Python kompiliert wird. Dieses kann dann mittels import in ein Python-Programm eingebunden werden. Als aktive Weiterentwicklung von Pyrex steht das Projekt Cython zur Verfügung, das z.B. im High-Performance Computeralgebrasystem SAGE verwendet wird. Das Cython-Projekt arbeitet daran, Cython zu einem vollständigen, optimierenden Compiler für Python zu machen.

PyPy ist ein von der EU finanziertes Projekt mit dem Ziel, einen Python-Interpreter in einer Untermenge von Python ("RPython") selbst neu zu implementieren. Es kann aber bereits Module, die (teilweise) in RPython geschrieben sind, in z. B. C übersetzen und somit beschleunigen, nicht selten um einen Faktor 50 oder mehr.

Was ist CPython dann eigentlich? Ich habe auch schon öfter gehört dass dort ein Compiler drinsitzt.

CPython ist eigentlich ein "kompilierender Interpreter"; kompiliert wird Python-Quellcode in Python-Bytecode, welcher dann auf einer stackbasierten virtuellen Maschine ausgeführt wird. Diese virtuelle Maschine ist gut dokumentiert in den Python-Quellen, so dass es bereits einige andere virtuelle Maschinen gibt, die auch (mehr oder weniger gut) Python-Bytecode ausführen können. Ein Beispiel ist Parrot, welches versucht, eine einheitliche virtuelle Maschine für Python und Perl zur Verfügung zu stellen.

Tags: Umsteiger

Python Performance (last edited 2009-06-17 16:14:14 by localhost)