Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
|
python:optimisation_python [2017/11/24 16:20] marc dexet créée |
python:optimisation_python [2017/11/24 16:41] (Version actuelle) marc dexet [Optimisation en Python] |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== Optimisation en Python ====== | ====== Optimisation en Python ====== | ||
| - | ===== Optimisation prématurée ===== | + | L'optimisation consiste à rendre plus rapides ou plus efficaces des portions de codes. |
| + | C'est une démarche délicate et parfois chronophage. | ||
| - | ===== \\ | + | **Il faut parfois évaluer le coût de l'optimisation au regard du bénéfice obtenu.** |
| - | L'optimisation en Python est une démarche que l'on entreprendre quand un problème de performance est constaté. Une règle de génie logicielle dit : ===== | + | |
| - | Optimization is Evil | + | ===== Attention à l'optimisation prématurée ===== |
| + | |||
| + | L'optimisation est une démarche qui fait suite à la constatation un problème de performance. Il peut être tentant de le faire pendant l'écriture du code. L'expérience cumulée de plusieurs génération de développeur montre que c'est une erreur. | ||
| + | |||
| + | Une règle de génie logiciel dit : | ||
| + | |||
| + | Optimization is Evil | ||
| Cela signifie que chercher l'optimisation avant de s'être assurer que le code fait bien ce que l'on attend de lui est contre-productif et met en péril la maintenabilité du code. | Cela signifie que chercher l'optimisation avant de s'être assurer que le code fait bien ce que l'on attend de lui est contre-productif et met en péril la maintenabilité du code. | ||
| - | En Python, la seule exception à cette règle est de vouloir travailler sur des ensembles de valeurs //qui peuvent devenir conséquents// avec les types python.\\ | + | ==== Le bon outil pour le bon usage ==== |
| - | Il faut passer très rapidement à l'utilisation de librairies spécialisées comme http://www.numpy.org/ ou https://pandas.pydata.org/. | + | |
| + | Une exception notable est la manipulation d'ensembles de valeurs //qui peuvent devenir conséquents// avec les seules types python (dict, list, ...). | ||
| + | |||
| + | Pour le calcul, Python n'est pas un outil très pertinent. Il est nécessaire de s'appuyer sur des librairies spécialisées comme http://www.numpy.org/ qui sont écrites en C++. | ||
| + | |||
| + | ====== Les anti-patterns ====== | ||
| + | |||
| + | TBD: mettre ici les doubles boucles python | ||
| + | |||
| + | ====== Les solutions ====== | ||
| + | |||
| + | TBD: refaire le benchmarking | ||
| + | |||
| + | ===== Numba ===== | ||
| + | |||
| + | https://github.com/numba/numba | ||
| + | |||
| + | TBD: Expliquer le contexte | ||
| + | |||
| + | <code python> | ||
| + | from numba import jit | ||
| + | @jit | ||
| + | def ma_function_a_optimiser(): | ||
| + | ... | ||
| + | </code> | ||