A múlt héten kezdtem ezt a kétrészes blogsorozatot a Python sebességének növeléséről a Cython és a PyPy segítségével. Bár a Cython hatásait már tárgyaltuk, szerettem volna folytatni a beszélgetést a PyPy bemutatásával, majd a PyPy és a Cython szembeállításával.
Mi az a PyPy?
A PyPyPy egy alternatív Python-értelmező és just-in-time (JIT) fordító, amely nagymértékben kompatibilis (néhány fenntartással) a CPython-értelmezővel. Gyorsaságra és hatékonyságra tervezték, és egy nyomkövető JIT fordítót használ a program gyakran végrehajtott részeinek futásidejű optimalizálására, így növelve a végrehajtási sebességet.
A PyPyPy normál Python programokat futtat; általában nem kell módosításokat végezni a Python kódon ahhoz, hogy az PyPy-n fusson. A JIT fordító természetéből adódóan időre van szüksége a program gyakran végrehajtott részeinek elemzéséhez, ezért a legjobban a néhány másodpercnél hosszabb ideig futó programokon működik.
A PyPy termelési rendszerben való használatának talán legnagyobb akadálya, hogy nem támogatja a CPython bővítőmodulokat. A PyPy dokumentációja szerint a bővítőmodul-támogatás kísérleti stádiumban van, és gyakran sokkal lassabban fut, mint a CPythonban. Ez azt jelenti, hogy néhány harmadik féltől származó, C bővítőmodulokkal rendelkező könyvtár nem feltétlenül működik PyPy-n – a tudományos számítástechnikai könyvtár, a NumPy egy figyelemre méltó példa erre. Mindezek után a PyPy képes futtatni a népszerű Python keretrendszerek és könyvtárak többségét, például a Django, Flask és SQLAlchemy.
A PyPy Wikipedia oldal és a PyPy weboldal rengeteg információt nyújt arról, hogy mi a PyPy és hogyan kell használni; az utóbbinak van egy szép része is, amely egy listát mutat a benchmarkokról és a CPythonhoz képest elért sebességjavulásukról.
A PyPy Wikipedia oldala és a PyPy honlapja rengeteg információt nyújt arról, hogy mi a PyPy és hogyan kell használni; az utóbbinak van egy szép szakasza is, amely egy listát mutat a benchmarkokról és a CPythonhoz képest elért sebességjavulásukról.
How Cython vs CPython Works
A fő célom a feladat elvégzésével az volt, hogy megértsem az eszközök működését, és össze tudjam hasonlítani a köztük lévő szintaxisbeli és kódszerkezeti különbségeket. Ezt szem előtt tartva úgy döntöttem, hogy írok egy egyszerű numerikus integrációs programot, amely a Cython dokumentációban megadott példán alapul. A teljes projekt forrása, beleértve a telepítési és Cython építési utasításokat, megtalálható a Bitbucketen.