Viime viikolla aloitin tämän kaksiosaisen blogisarjan Pythonin nopeuden lisäämisestä Cythonin ja PyPyn avulla. Vaikka keskustelimme jo Cythonin vaikutuksista, halusin jatkaa keskustelua tarkastelemalla PyPy:tä ja sen jälkeen vertailemalla sekä PyPy:tä että Cythonia.
Mikä on PyPy?
PyPy on vaihtoehtoinen Python-tulkki ja just-in-time (JIT) kääntäjä, joka on erittäin yhteensopiva (muutamin varauksin) CPython-tulkin kanssa. Se on suunniteltu nopeutta ja tehokkuutta silmällä pitäen, ja se käyttää jäljittelevää JIT-kääntäjää optimoimaan usein suoritettavia ohjelman osia ajonaikana, mikä lisää suoritusnopeutta.
PyPy ajaa tavallisia Python-ohjelmia; yleensä Python-koodiin ei tarvitse tehdä mitään muutoksia, jotta se voidaan ajaa PyPyllä. JIT-kääntäjän luonteen vuoksi se tarvitsee aikaa analysoidakseen usein suoritettavia ohjelman osia, joten se toimii parhaiten ohjelmissa, joiden suoritusaika on pidempi kuin muutama sekunti.
PyPy:n käytön ehkä suurin este tuotantojärjestelmässä on sen tuen puute CPython-laajennusmoduuleille. PyPyn dokumentaation mukaan laajennusmoduulituki on kokeellinen ja toimii usein paljon hitaammin kuin CPythonissa. Tämä tarkoittaa, että jotkin kolmannen osapuolen kirjastot, joilla on C-laajennusmoduulit, eivät välttämättä toimi PyPy:ssä – tieteellisen laskennan kirjasto NumPy on tästä hyvä esimerkki. Tämän sanottuaan PyPy pystyy ajamaan suurinta osaa suosituista Python-kehyksistä ja -kirjastoista, kuten Djangoa, Flaskia ja SQLAlchemya.
PyPy:n Wikipedia-sivulla ja PyPy:n verkkosivustolla on runsaasti tietoa siitä, mikä PyPy on ja miten sitä käytetään; jälkimmäisellä sivustolla on myös hieno osio, jossa on luettelo vertailuanalyyseistä ja niiden nopeusparannuksista CPythoniin verrattuna.
PyPy:n Wikipedia-sivulla ja PyPy:n verkkosivustolla on runsaasti tietoa siitä, mikä PyPy on ja miten sitä käytetään; jälkimmäisellä on myös mukava osio, jossa on luettelo vertailuarvoista ja niiden nopeusparannuksista CPythoniin verrattuna.
Kuinka Cython vs. CPython toimii
Pääasiallisena tavoitteenani tämän harjoituksen tekemisessä oli ymmärtää, miten työkalut toimivat ja pystyä vertailemaan niiden välisiä eroja syntaksissa ja koodin rakenteessa. Tätä silmällä pitäen päätin kirjoittaa yksinkertaisen numeerisen integrointiohjelman, joka perustuu Cythonin dokumentaatiossa annettuun esimerkkiin. Projektin koko lähdekoodi, mukaan lukien asennus- ja Cython-kehitysohjeet, löytyy Bitbucketista.