SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
Prolage en Python
Bruno Goutorbe
Cdiscount
19 mai 2016
Prolage (proling)
Le prolage consiste à déterminer où mon code passe (perd ?)
du temps
De préférence sans avoir à se taper partout des
t0 = datetime . now ()
. . .
p r i n t ( datetime . now () − t0 )
L'objectif est de savoir où concentrer ses eorts pour
optimiser le code, avant de passer à la parallélisation
Bruno Goutorbe Prolage en Python
Cas d'usage
Pour illustrer la suite, on va se baser sur le script
similar_products.py, qui part d'une dataframe de produits :
# product_id price
0 product_0 700.10
1 product_1 500.55
. . .
et d'une matrice de similarité S :
Sij = similarité entre le produit i et le produit j
pour créer un chier qui associe à chaque produit une liste de
produit similaires (1) au moins aussi chers et (2) triés par
similarité décroissante :
product_id simproduct_ids
product_0 product_244
product_1 product_391 , product_175 , product_261
. . .
Bruno Goutorbe Prolage en Python
Temps d'exécution du code
Avec 100 produits : 2 s
Avec 500 produits : 15 s
Avec 1000 produits : 30 s
. . .
Estimation avec 2 millions de produits : environ 17 heures !
Un prolage s'impose
Bruno Goutorbe Prolage en Python
Proleur
On utilise de préférence cProfile pour proler un code Python :
soit directement dans l'interpréteur Python :
 import cProfile
 cProfile.run(2 + 2)
3 function calls in 0.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 string :1(module )
1 0.000 0.000 0.000 0.000 {built -in method exec}
1 0.000 0.000 0.000 0.000 {method 'disable ' ...}
soit en ligne de commande :
 python −m c P r o f i l e s c r i p t . py
tottime = temps passé dans la fonction (sans compter les
fonctions qu'elle appelle)
cumtime = temps passé dans la fonction (en incluant les
fonctions qu'elle appelle)
Bruno Goutorbe Prolage en Python
Visualisation graphique : RunSnakeRun
Comme les résultats sont imbitables on les envoie dans un
chier et on se sert d'outils pour nous sortir de belles
représentations graphiques :
 python −m c P r o f i l e −o s c r i p t . prof s c r i p t . py
 runsnake s c r i p t . prof
ce qui donne des boites dont la taille représente le temps
passé :
Problème : RunSnakeRun n'est pas compatible avec Python 3
Bruno Goutorbe Prolage en Python
Visualisation graphique : SnakeViz
Pour installer SnakeViz sur Windows, un pip install snakeviz
fonctionne bien, ensuite :
 python −m c P r o f i l e −o similar_products . prof
similar_products . py
 snakeviz similar_products . prof
Et le miracle
s'accomplit :
Disque interne =
fonction racine
Un arc = une
fonction appelée
(par l'arc adjacent
interne)
Longueur d'arc =
temps passé
Bruno Goutorbe Prolage en Python
Granularité : de la fonction à la ligne
On a trouvé que le script passe la moitié de son temps dans la
fonction get_simproducts() et l'autre moitié dans
filter_and_sort_simproducts() 1
Mais on aimerait bien avoir une vision du temps passé ligne
par ligne dans ces fonctions
cProle agrège des statistiques par fonction ; pour passer à la
ligne il faut line_profiler.
Sur Windows un pip install line_profiler a peu de
chance de marcher. Mieux vaut télécharger la libraire
précompilée
2.
1. ok ce sont les deux seules fonctions. Mais bon, vous serez bien content de
pouvoir les identier lorsque votre programme contiendra 50 fonctions réparties
dans 15 modules.
2. ici : www.lfd.uci.edu/∼gohlke/pythonlibs/#line_proler
Bruno Goutorbe Prolage en Python
Prolage par ligne
Avant d'utiliser line_profiler il faut décorer les fonctions
que l'on souhaite proler avec un @profile au-dessus de la
fonction, par exemple :
@profile
def filter_and_sort_simproducts (...):
...
Ensuite on tape en ligne de commande
 kernprof -l -v similar_products.py
Bruno Goutorbe Prolage en Python
Prolage par ligne (suite)
Et ça donne :
Total time : 21.6487 s
F i l e : similar_products . py
Function : filter_and_sort_simproducts at l i n e 34
Line # Hits Time Per Hit % Time Line Contents
==============================================================
34 @ p r o f i l e
35 def filter_and_sort
36 
37 removes s i m i l a r
38 s o r t s them by
39 
40 500 5107 10.2 0.0 i f min_price :
41 500 6735587 13471.2 9.4 dfsimproduct
42 500 64969459 129938.9 90.6 dfsimproducts .
43 500 4408 8.8 0.0 return dfsimprod
On trouve que les lignes
dfsimproducts [ ' sim ' ] = s i m i l a r i t i e s
dfsimproducts . sort_values ( ' sim ' , ascending=False ,
i n p l a c e=True )
consomment 90% du temps.
Bruno Goutorbe Prolage en Python
Optimisation
Problème de la ligne
dfsimproducts . sort_values ( ' sim ' , ascending=False ,
i n p l a c e=True )
→ le tri sur place prend 10 fois plus de temps qu'un tri vers
une nouvelle dataframe !
Problème de la ligne
dfsimproducts [ ' sim ' ] = s i m i l a r i t i e s
→ l'opération ajouter une colonne force pandas à créer une
copie, alors que dfsimproducts n'était au départ qu'une vue
de dfproducts
Bruno Goutorbe Prolage en Python
Résumé
cProfile pour proler le code par fonction
SnakeViz pour visualiser les résultats
line_profiler pour proler le code par ligne
Un lien intéressant pour en savoir plus : nbviewer.jupyter.org
Bruno Goutorbe Prolage en Python

Contenu connexe

Tendances

Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018salah fenni
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018salah fenni
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
Fonctions chaine
Fonctions chaineFonctions chaine
Fonctions chaineAfef Ilahi
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)salah fenni
 
Wygday 2011 - C#5 Async CTP - Reactive Extensions
Wygday 2011  - C#5 Async CTP - Reactive ExtensionsWygday 2011  - C#5 Async CTP - Reactive Extensions
Wygday 2011 - C#5 Async CTP - Reactive Extensionswyggio
 
The iTronics Internet of things Workshop 27-05-2017 - get started
The iTronics Internet of things Workshop 27-05-2017 - get startedThe iTronics Internet of things Workshop 27-05-2017 - get started
The iTronics Internet of things Workshop 27-05-2017 - get startedRomaric Saounde Tsopnang
 
Les algorithmes avancés
Les algorithmes avancésLes algorithmes avancés
Les algorithmes avancésmohamed_SAYARI
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniShellmates
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelleGeeks Anonymes
 
2- The iTronics Internet of things Workshop 27-05-2017 - GPIO
2- The iTronics Internet of things Workshop 27-05-2017 - GPIO2- The iTronics Internet of things Workshop 27-05-2017 - GPIO
2- The iTronics Internet of things Workshop 27-05-2017 - GPIORomaric Saounde Tsopnang
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en PythonABDESSELAM ARROU
 
Programming language python 2021
Programming language python 2021Programming language python 2021
Programming language python 2021Dalila Chouaya
 
12 quelques prédicats prédéfinis de swi
12  quelques prédicats prédéfinis de swi12  quelques prédicats prédéfinis de swi
12 quelques prédicats prédéfinis de swiSiham Rim Boudaoud
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivitéSana Aroussi
 

Tendances (20)

Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
 
Tuto crontab
Tuto crontabTuto crontab
Tuto crontab
 
Récursivité
RécursivitéRécursivité
Récursivité
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
Fonctions chaine
Fonctions chaineFonctions chaine
Fonctions chaine
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)
 
Wygday 2011 - C#5 Async CTP - Reactive Extensions
Wygday 2011  - C#5 Async CTP - Reactive ExtensionsWygday 2011  - C#5 Async CTP - Reactive Extensions
Wygday 2011 - C#5 Async CTP - Reactive Extensions
 
Algorithmes de tri
Algorithmes de triAlgorithmes de tri
Algorithmes de tri
 
The iTronics Internet of things Workshop 27-05-2017 - get started
The iTronics Internet of things Workshop 27-05-2017 - get startedThe iTronics Internet of things Workshop 27-05-2017 - get started
The iTronics Internet of things Workshop 27-05-2017 - get started
 
Les algorithmes avancés
Les algorithmes avancésLes algorithmes avancés
Les algorithmes avancés
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelle
 
2- The iTronics Internet of things Workshop 27-05-2017 - GPIO
2- The iTronics Internet of things Workshop 27-05-2017 - GPIO2- The iTronics Internet of things Workshop 27-05-2017 - GPIO
2- The iTronics Internet of things Workshop 27-05-2017 - GPIO
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Programmation Fonctionnelle
Programmation FonctionnelleProgrammation Fonctionnelle
Programmation Fonctionnelle
 
Programming language python 2021
Programming language python 2021Programming language python 2021
Programming language python 2021
 
12 quelques prédicats prédéfinis de swi
12  quelques prédicats prédéfinis de swi12  quelques prédicats prédéfinis de swi
12 quelques prédicats prédéfinis de swi
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivité
 

Similaire à Python profiling

Formation python
Formation pythonFormation python
Formation pythonj_lipaz
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Faycel Chaoua
 
livre-algorithmes.pdf
livre-algorithmes.pdflivre-algorithmes.pdf
livre-algorithmes.pdfDurelDonfack
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)Tunisie collège
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelleMICHRAFY MUSTAFA
 
cours d'algorithmique et programmation 3sc final .pdf
cours d'algorithmique et programmation 3sc final .pdfcours d'algorithmique et programmation 3sc final .pdf
cours d'algorithmique et programmation 3sc final .pdfLamissGhoul1
 
Tp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et rosTp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et rosSaid Benaissa
 
Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2hortis
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronestchappui
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSSAyoubElmrabet6
 

Similaire à Python profiling (20)

Formation python
Formation pythonFormation python
Formation python
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Mathématiques et Python
Mathématiques et PythonMathématiques et Python
Mathématiques et Python
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
 
livre-algorithmes.pdf
livre-algorithmes.pdflivre-algorithmes.pdf
livre-algorithmes.pdf
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
Formation python
Formation pythonFormation python
Formation python
 
Theme 7
Theme 7Theme 7
Theme 7
 
cours d'algorithmique et programmation 3sc final .pdf
cours d'algorithmique et programmation 3sc final .pdfcours d'algorithmique et programmation 3sc final .pdf
cours d'algorithmique et programmation 3sc final .pdf
 
Cours de c
Cours de cCours de c
Cours de c
 
Tp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et rosTp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et ros
 
Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2
 
Cours de Génie Logiciel / ESIEA 2016-17
Cours de Génie Logiciel / ESIEA 2016-17Cours de Génie Logiciel / ESIEA 2016-17
Cours de Génie Logiciel / ESIEA 2016-17
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 

Dernier

Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...France Travail
 
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel AttalELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attalcontact Elabe
 
Bidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from TransformersBidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from Transformersbahija babzine
 
analyse husseindey AMIROUCHE Abdeslem.pptx
analyse husseindey AMIROUCHE Abdeslem.pptxanalyse husseindey AMIROUCHE Abdeslem.pptx
analyse husseindey AMIROUCHE Abdeslem.pptxHadJer61
 
Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023France Travail
 
To_understand_transformers_together presentation
To_understand_transformers_together presentationTo_understand_transformers_together presentation
To_understand_transformers_together presentationbahija babzine
 

Dernier (6)

Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
 
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel AttalELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
 
Bidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from TransformersBidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from Transformers
 
analyse husseindey AMIROUCHE Abdeslem.pptx
analyse husseindey AMIROUCHE Abdeslem.pptxanalyse husseindey AMIROUCHE Abdeslem.pptx
analyse husseindey AMIROUCHE Abdeslem.pptx
 
Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023
 
To_understand_transformers_together presentation
To_understand_transformers_together presentationTo_understand_transformers_together presentation
To_understand_transformers_together presentation
 

Python profiling

  • 1. Prolage en Python Bruno Goutorbe Cdiscount 19 mai 2016
  • 2. Prolage (proling) Le prolage consiste à déterminer où mon code passe (perd ?) du temps De préférence sans avoir à se taper partout des t0 = datetime . now () . . . p r i n t ( datetime . now () − t0 ) L'objectif est de savoir où concentrer ses eorts pour optimiser le code, avant de passer à la parallélisation Bruno Goutorbe Prolage en Python
  • 3. Cas d'usage Pour illustrer la suite, on va se baser sur le script similar_products.py, qui part d'une dataframe de produits : # product_id price 0 product_0 700.10 1 product_1 500.55 . . . et d'une matrice de similarité S : Sij = similarité entre le produit i et le produit j pour créer un chier qui associe à chaque produit une liste de produit similaires (1) au moins aussi chers et (2) triés par similarité décroissante : product_id simproduct_ids product_0 product_244 product_1 product_391 , product_175 , product_261 . . . Bruno Goutorbe Prolage en Python
  • 4. Temps d'exécution du code Avec 100 produits : 2 s Avec 500 produits : 15 s Avec 1000 produits : 30 s . . . Estimation avec 2 millions de produits : environ 17 heures ! Un prolage s'impose Bruno Goutorbe Prolage en Python
  • 5. Proleur On utilise de préférence cProfile pour proler un code Python : soit directement dans l'interpréteur Python : import cProfile cProfile.run(2 + 2) 3 function calls in 0.000 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.000 0.000 string :1(module ) 1 0.000 0.000 0.000 0.000 {built -in method exec} 1 0.000 0.000 0.000 0.000 {method 'disable ' ...} soit en ligne de commande : python −m c P r o f i l e s c r i p t . py tottime = temps passé dans la fonction (sans compter les fonctions qu'elle appelle) cumtime = temps passé dans la fonction (en incluant les fonctions qu'elle appelle) Bruno Goutorbe Prolage en Python
  • 6. Visualisation graphique : RunSnakeRun Comme les résultats sont imbitables on les envoie dans un chier et on se sert d'outils pour nous sortir de belles représentations graphiques : python −m c P r o f i l e −o s c r i p t . prof s c r i p t . py runsnake s c r i p t . prof ce qui donne des boites dont la taille représente le temps passé : Problème : RunSnakeRun n'est pas compatible avec Python 3 Bruno Goutorbe Prolage en Python
  • 7. Visualisation graphique : SnakeViz Pour installer SnakeViz sur Windows, un pip install snakeviz fonctionne bien, ensuite : python −m c P r o f i l e −o similar_products . prof similar_products . py snakeviz similar_products . prof Et le miracle s'accomplit : Disque interne = fonction racine Un arc = une fonction appelée (par l'arc adjacent interne) Longueur d'arc = temps passé Bruno Goutorbe Prolage en Python
  • 8. Granularité : de la fonction à la ligne On a trouvé que le script passe la moitié de son temps dans la fonction get_simproducts() et l'autre moitié dans filter_and_sort_simproducts() 1 Mais on aimerait bien avoir une vision du temps passé ligne par ligne dans ces fonctions cProle agrège des statistiques par fonction ; pour passer à la ligne il faut line_profiler. Sur Windows un pip install line_profiler a peu de chance de marcher. Mieux vaut télécharger la libraire précompilée 2. 1. ok ce sont les deux seules fonctions. Mais bon, vous serez bien content de pouvoir les identier lorsque votre programme contiendra 50 fonctions réparties dans 15 modules. 2. ici : www.lfd.uci.edu/∼gohlke/pythonlibs/#line_proler Bruno Goutorbe Prolage en Python
  • 9. Prolage par ligne Avant d'utiliser line_profiler il faut décorer les fonctions que l'on souhaite proler avec un @profile au-dessus de la fonction, par exemple : @profile def filter_and_sort_simproducts (...): ... Ensuite on tape en ligne de commande kernprof -l -v similar_products.py Bruno Goutorbe Prolage en Python
  • 10. Prolage par ligne (suite) Et ça donne : Total time : 21.6487 s F i l e : similar_products . py Function : filter_and_sort_simproducts at l i n e 34 Line # Hits Time Per Hit % Time Line Contents ============================================================== 34 @ p r o f i l e 35 def filter_and_sort 36 37 removes s i m i l a r 38 s o r t s them by 39 40 500 5107 10.2 0.0 i f min_price : 41 500 6735587 13471.2 9.4 dfsimproduct 42 500 64969459 129938.9 90.6 dfsimproducts . 43 500 4408 8.8 0.0 return dfsimprod On trouve que les lignes dfsimproducts [ ' sim ' ] = s i m i l a r i t i e s dfsimproducts . sort_values ( ' sim ' , ascending=False , i n p l a c e=True ) consomment 90% du temps. Bruno Goutorbe Prolage en Python
  • 11. Optimisation Problème de la ligne dfsimproducts . sort_values ( ' sim ' , ascending=False , i n p l a c e=True ) → le tri sur place prend 10 fois plus de temps qu'un tri vers une nouvelle dataframe ! Problème de la ligne dfsimproducts [ ' sim ' ] = s i m i l a r i t i e s → l'opération ajouter une colonne force pandas à créer une copie, alors que dfsimproducts n'était au départ qu'une vue de dfproducts Bruno Goutorbe Prolage en Python
  • 12. Résumé cProfile pour proler le code par fonction SnakeViz pour visualiser les résultats line_profiler pour proler le code par ligne Un lien intéressant pour en savoir plus : nbviewer.jupyter.org Bruno Goutorbe Prolage en Python