Letzte Woche habe ich diese zweiteilige Blogserie über die Erhöhung der Geschwindigkeit von Python durch Cython und PyPy begonnen. Während wir bereits die Auswirkungen von Cython erörtert haben, wollte ich die Diskussion mit einem Blick auf PyPy fortsetzen und dann eine Gegenüberstellung von PyPy und Cython vornehmen.
Was ist PyPy?
PyPy ist ein alternativer Python-Interpreter und Just-in-Time (JIT)-Compiler, der (mit einigen Einschränkungen) hochgradig kompatibel mit dem CPython-Interpreter ist. Er ist auf Geschwindigkeit und Effizienz ausgelegt und verwendet einen Tracing-JIT-Compiler, um häufig ausgeführte Teile des Programms zur Laufzeit zu optimieren und so die Ausführungsgeschwindigkeit zu erhöhen.
PyPy führt normale Python-Programme aus; im Allgemeinen müssen keine Änderungen am Python-Code vorgenommen werden, damit er auf PyPy läuft. Aufgrund der Natur des JIT-Compilers braucht er Zeit, um häufig ausgeführte Teile des Programms zu analysieren, daher funktioniert er am besten bei Programmen, die länger als ein paar Sekunden laufen.
Das größte Hindernis für den Einsatz von PyPy in einem Produktionssystem ist vielleicht die fehlende Unterstützung für CPython-Erweiterungsmodule. Laut der PyPy-Dokumentation ist die Unterstützung von Erweiterungsmodulen experimentell und läuft oft viel langsamer als in CPython. Das bedeutet, dass einige Bibliotheken von Drittanbietern, die über C-Erweiterungsmodule verfügen, unter PyPy möglicherweise nicht funktionieren – die Bibliothek für wissenschaftliche Berechnungen NumPy ist ein bemerkenswertes Beispiel. Dennoch ist PyPy in der Lage, die meisten populären Python-Frameworks und -Bibliotheken wie Django, Flask und SQLAlchemy auszuführen.
Die PyPy-Wikipedia-Seite und die PyPy-Website bieten zahlreiche Informationen darüber, was PyPy ist und wie man es verwendet; letztere hat auch einen schönen Abschnitt, der eine Liste von Benchmarks und deren Geschwindigkeitsverbesserungen gegenüber CPython zeigt.
Die PyPy-Wikipedia-Seite und die PyPy-Website bieten viele Informationen darüber, was PyPy ist und wie man es benutzt; letztere hat auch einen schönen Abschnitt, der eine Liste von Benchmarks und deren Geschwindigkeitsverbesserungen gegenüber CPython zeigt.
Wie Cython vs. CPython funktioniert
Mein Hauptziel bei dieser Übung war es, zu verstehen, wie die Tools funktionieren, und in der Lage zu sein, die Unterschiede in Syntax und Codestruktur zwischen ihnen zu vergleichen. Zu diesem Zweck habe ich mich entschieden, ein einfaches numerisches Integrationsprogramm zu schreiben, das auf einem Beispiel aus der Cython-Dokumentation basiert. Der vollständige Quellcode des Projekts, einschließlich der Installations- und Cython-Bauanleitung, ist auf Bitbucket zu finden.