W zeszłym tygodniu rozpocząłem dwuczęściową serię blogów o zwiększaniu szybkości Pythona poprzez Cython i PyPy. Podczas gdy już omówiliśmy efekty Cythona, chciałem kontynuować dyskusję, przyglądając się PyPy, a następnie kontrastując zarówno PyPy, jak i Cythona.
Co to jest PyPy?
PyPy jest alternatywnym interpreterem Pythona i kompilatorem just-in-time (JIT), który jest wysoce kompatybilny (z zastrzeżeniami) z interpreterem CPython. Został zaprojektowany z myślą o szybkości i wydajności oraz wykorzystuje kompilator JIT do optymalizacji często wykonywanych części programu w czasie wykonywania, zwiększając w ten sposób prędkość wykonywania.
PyPy uruchamia zwykłe programy Pythona; ogólnie rzecz biorąc, nie trzeba wprowadzać żadnych modyfikacji do kodu Pythona, aby można go było uruchomić na PyPy. Ze względu na naturę kompilatora JIT, potrzebuje on czasu na przeanalizowanie często wykonywanych części programu, dlatego najlepiej sprawdza się w programach działających dłużej niż kilka sekund.
Prawdopodobnie największą przeszkodą w użyciu PyPy w systemie produkcyjnym jest brak obsługi modułów rozszerzeń CPython. Zgodnie z dokumentacją PyPy, obsługa modułów rozszerzeń jest eksperymentalna i często działa znacznie wolniej niż w CPython. Oznacza to, że niektóre biblioteki firm trzecich, które mają moduły rozszerzeń dla języka C, mogą nie działać w PyPy – przykładem może być biblioteka NumPy do obliczeń naukowych. Mimo to PyPy jest w stanie uruchomić większość popularnych frameworków i bibliotek Pythona, takich jak Django, Flask i SQLAlchemy.
Strona PyPy w Wikipedii i witryna PyPy dostarczają wielu informacji na temat tego, czym jest PyPy i jak go używać; ta ostatnia ma również fajną sekcję, która pokazuje listę benchmarków i ich poprawę szybkości w stosunku do CPythona.
Strona Wikipedii PyPy i strona internetowa PyPy dostarczają wielu informacji na temat tego, czym jest PyPy i jak go używać; ta ostatnia ma również ładną sekcję, która pokazuje listę benchmarków i ich ulepszeń prędkości w stosunku do CPython.
Jak działa Cython vs CPython
Moim głównym celem w tym ćwiczeniu było zrozumienie, jak działają te narzędzia i możliwość porównania różnic w składni i strukturze kodu między nimi. Mając to na uwadze, postanowiłem napisać prosty program do całkowania numerycznego, który jest oparty na przykładzie podanym w dokumentacji Cythona. Pełne źródło projektu, w tym instrukcje instalacji i kompilacji Cythona, można znaleźć na Bitbucket.