17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Optimisation du bytecode<br />

Bonnes pratiques et optimisation du code<br />

CHAPITRE 13<br />

Lorsqu’un fichier source est utilisé par Python, l’interpréteur génère un fichier<br />

d’extension .pyc, contenant le code source après le travail de l’analyseur syntaxique.<br />

Ce code est appelé bytecode et c’est ce fichier qui est utilisé pendant l’exécution du<br />

programme, afin d’éviter de refaire l’analyse à chaque utilisation.<br />

Il est possible de passer l’option -O à l’interpréteur. Le bytecode généré est alors légèrement<br />

optimisé par le retrait de toutes les directives d’assertions trouvées dans le code.<br />

L’interpréteur n’utilise plus les fichiers .pyc et compile le bytecode dans des fichiers .pyo.<br />

L’option -OO quant à elle retire en outre les docstrings du code, pour obtenir des<br />

fichiers bytecode plus compacts, mais cette option n’est pas recommandée car certaines<br />

fonctionnalités peuvent se baser sur leur lecture.<br />

Psyco et Cython<br />

Psyco et Cython sont deux outils qui permettent d’optimiser les performances, par<br />

deux approches différentes :<br />

Psyco travaille de manière transparente et tente d’accélérer à la volée le programme.<br />

Cython (anciennement Pyrex) propose un nouveau langage de programmation<br />

qui permet d’utiliser directement des types de données C dans du code Python.<br />

Psyco<br />

Psyco (http://psyco.sourceforge.net), d’Armin Rigo, est une extension pour Python qui<br />

accélère l’exécution de certaines séquences de code. L’intérêt majeur de cet outil est<br />

qu’il opère de manière transparente sur le code existant, sans qu’il soit nécessaire de le<br />

modifier.<br />

Une fois l’outil installé, le module psyco est disponible et un simple appel à<br />

psyco.full() permet de bénéficier d’une optimisation transparente.<br />

Psyco en action<br />

def normal():<br />

a = 0<br />

for i in range(5000):<br />

a = a + 3<br />

return a<br />

if __name__ == '__main__':<br />

import timeit<br />

477

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!