La settimana scorsa ho iniziato questa serie di blog in due parti sull’aumento della velocità di Python attraverso Cython e PyPy. Mentre abbiamo già discusso gli effetti di Cython, ho voluto continuare la discussione con uno sguardo a PyPy e poi un contrasto tra PyPy e Cython.
Che cos’è PyPy?
PyPy è un interprete Python alternativo e un compilatore just-in-time (JIT) che è altamente compatibile (soggetto ad alcune limitazioni) con l’interprete CPython. È progettato per la velocità e l’efficienza e usa un compilatore JIT tracciante per ottimizzare le parti frequentemente eseguite del programma in fase di esecuzione, aumentando così la velocità di esecuzione.
PyPy esegue normali programmi Python; in generale, non è necessario apportare modifiche al codice Python per permetterne l’esecuzione su PyPy. A causa della natura del compilatore JIT, ha bisogno di tempo per analizzare le parti del programma eseguite frequentemente, quindi funziona meglio su programmi che durano più di qualche secondo.
Perhaps il più grande ostacolo all’uso di PyPy in un sistema di produzione è la sua mancanza di supporto per i moduli di estensione CPython. Secondo la documentazione di PyPy, il supporto ai moduli di estensione è sperimentale e spesso funziona molto più lentamente che in CPython. Questo significa che alcune librerie di terze parti che hanno moduli di estensione C potrebbero non funzionare su PyPy – la libreria di calcolo scientifico NumPy è un esempio notevole. Detto questo, PyPy è in grado di eseguire la maggior parte dei popolari framework e librerie Python, come Django, Flask e SQLAlchemy.
La pagina Wikipedia di PyPy e il sito web di PyPy forniscono molte informazioni su cosa sia PyPy e come usarlo; quest’ultimo ha anche una bella sezione che mostra una lista di benchmark e i loro miglioramenti di velocità rispetto a CPython.
La pagina di Wikipedia di PyPy e il sito web di PyPy forniscono molte informazioni su cos’è PyPy e su come usarlo; quest’ultimo ha anche una bella sezione che mostra una lista di benchmark e i loro miglioramenti di velocità rispetto a CPython.
Come funziona Cython vs CPython
Il mio obiettivo principale nel fare questo esercizio era di capire come funzionano gli strumenti, ed essere in grado di confrontare le differenze di sintassi e struttura del codice tra loro. Con questo in mente, ho scelto di scrivere un semplice programma di integrazione numerica, che è basato su un esempio dato nella documentazione di Cython. Il sorgente completo del progetto, incluse le istruzioni di installazione e compilazione di Cython, può essere trovato su Bitbucket.