Vorige week ben ik begonnen met deze tweedelige blogserie over het verhogen van de snelheid van Python door middel van Cython en PyPy. Terwijl we de effecten van Cython al hebben besproken, wilde ik de discussie voortzetten met een blik op PyPy en vervolgens een contrast van zowel PyPy als Cython.
Wat is PyPy?
PyPy is een alternatieve Python-interpreter en just-in-time (JIT) compiler die zeer compatibel is (behoudens een paar voorbehouden) met de CPython-interpreter. Het is ontworpen voor snelheid en efficiëntie en maakt gebruik van een tracerende JIT-compiler om vaak uitgevoerde delen van het programma tijdens runtime te optimaliseren, waardoor de uitvoeringssnelheid toeneemt.
PyPy draait gewone Python-programma’s; in het algemeen hoeven er geen wijzigingen in Python-code te worden aangebracht om het op PyPy te laten draaien. Vanwege de aard van de JIT-compiler, heeft het tijd nodig om vaak uitgevoerde delen van het programma te analyseren, dus het werkt het beste op programma’s die langer dan een paar seconden lopen.
Perhaps de grootste hindernis voor het gebruik van PyPy in een productiesysteem is het gebrek aan ondersteuning voor CPython-uitbreidingsmodules. Volgens de PyPy documentatie is de ondersteuning voor uitbreidingsmodules experimenteel en vaak veel langzamer dan in CPython. Dit betekent dat sommige bibliotheken van derde partijen die C uitbreidingsmodules hebben misschien niet werken op PyPy – de wetenschappelijke rekenbibliotheek NumPy is een opmerkelijk voorbeeld. Dit gezegd hebbende, is PyPy in staat om de meerderheid van de populaire Python frameworks en bibliotheken te draaien, zoals Django, Flask, en SQLAlchemy.
De PyPy Wikipedia pagina en de PyPy website geven veel informatie over wat PyPy is en hoe het te gebruiken; de laatste heeft ook een mooie sectie die een lijst van benchmarks laat zien en hun snelheidsverbeteringen ten opzichte van CPython.
De PyPy Wikipedia pagina en de PyPy website geven veel informatie over wat PyPy is en hoe het te gebruiken; de laatste heeft ook een mooie sectie die een lijst van benchmarks laat zien en hun snelheidsverbeteringen ten opzichte van CPython.
Hoe Cython vs CPython werkt
Mijn belangrijkste doel bij het doen van deze oefening was om te begrijpen hoe de tools werken, en om in staat te zijn om de verschillen in syntaxis en codestructuur tussen hen te vergelijken. Met dat in gedachten, koos ik ervoor om een eenvoudig numeriek integratie programma te schrijven, dat gebaseerd is op een voorbeeld uit de Cython documentatie. De volledige broncode van het project, inclusief installatie en Cython bouwinstructies, kan worden gevonden op Bitbucket.