Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/11/2022, à 22:53

candide_du_2b

Comment utiliser cProfile avec Python

Bonjour tout le monde ...
Suis-je dans la bonne partie du forum ?
Je voudrais "profiler" un projet Python assez volumineux pas tant pour l'optimiser en terme de temps d'exécution, mais plutôt pour vérifier si par erreur, je n'exécute pas inutilement certaines fonctions plusieurs fois. Vous allez me dire que si mon projet est bien organisé, cela ne devrait pas arriver, mais, il est vraiment très gros ... et je suis assez brouillon.
Ma question est donc très simple.
Le projet démarre avec le script principal qui s'appelle JTC.py. Au début de ce script, on trouve les importations des différentes bibliothèques et de 3 (gros) modules. JTC.py ressemble donc à ceci

# ! /usr/bin/env python3
# -*- coding: utf-8 -*-
import time
from gui import *
import FONC
import DONNES
import FICHIERS
import os

import cProfile
profiler = cProfile.Profile()
profiler.enable()
result = JTC            #   JTC.py est le script principal
profiler.disable()

Lorsque j' exécute cela, le script se lance correctement et le projet fonctionne parfaitement mais je crois que ce n'est pas ainsi que je dois appeler mon script principal car quand j'exécute cela le répertoire où se trouve le projet s'enrichit d'un fichier sortie.txt très prometteur ... mais illisible (par même avec un éditeur hexa-décimal . Et ce fichier s'appelle sortie.txt ??? sorti, je ne sais d'où.
C'est pas pour rien que mon pseudo est Candide, direz-vous !
Voici un petit extrait du fichier de la sortie.txt qui pèse au total environ 11 Ko

\FB)\FA~\E9\00\00\00\00\FA"<method 'items' of 'dict' objects>)\E9\00\00\00r\00\00\00g\FBlӎ\D1\F0\CC>g\FBlӎ\D1\F0\CC>{\A9\FA'/usr/lib/python3.10/tkinter/__init__.pyi\D9\00\00\DA_options)\E9
\00\00\00r\00\00\00g\9F\A9\91\CA>g\9F\A9\91\CA>\A9r\00\00\00i\B7\00\00\DA__init__)\E9\00\00\00r\00\00\00g7\EF\A2)\E7\FD\92>g7\EF\A2)\E7\FD\92>0)r\00\00\00r\00\00\00\FA#<method 'update' of 'dict' objects>)\E9\00\00\00r
\00\00\00g\D3\C9O3o\98\E2>g\D3\C9O3o\98\E2>{\A9r\00\00\00\E9e\00\00\00\DA	_cnfmerge)r
\00\00\00r
\00\00\00g\D3\C9O3o\98\E2>g\D3\C9O3o\98\E2>0)r\00\00\00r\00\00\00\FA#<method 'append' of 'list' objects>)r\00\00\00r\00\00\00g6\91\F7|]\9C>g6\91\F7|]\9C>{\A9r\00\00\00i\00\00\DA	_register)r\00\00\00r\00\00\00g6\91\F7|]\9C>g6\91\F7|]\9C>0)r\00\00\00r\00\00\00\FA#<built-in method builtins.callable>)\E9\00\00\00r\00\00\00gzqE\D6\D8-\CB>gzqE\D6\D8-\CB>{r\00\00\00)r
\00\00\00r
\00\00\00g"O\CF\B2Y\C9>g"O\CF\B2Y\C9>r	
\00\00\DA_create)r\00\00\00r\00\00\00g|4[\CDȍ\D3>g|4[\CDȍ\D3>0)r\00\00\00r\00\00\00\FA <built-in method builtins.print>)r\00\00\00r\00\00\00gDžkΑ?gDžkΑ?{0)r\00\00\00r\00\00\00\FA<built-in method builtins.repr>)r\00\00\00r\00\00\00g+yGV6\C7>g+yGV6\C7>{r\00\00\00)r\00\00\00r\00\00\00g+yGV6\C7>g+yGV6\C7>0)r\00\00\00r\00\00\00\FA <built-in method builtins.round>)r\00\00\00r\00\00\00g\95Ӆ\F5\D2V\DD>g\95Ӆ\F5\D2V\DD>{0)r\00\00\00r\00\00\00\FA<built-in method posix.stat>)\E9\00\00\00r&\00\00\00gh\8D\FD	\87\FC>gh\8D\FD	\87\FC>{\A9\FA"/usr/lib/python3.10/genericpath.py\E9\00\00\00\DAisfile)r&\00\00\00r&\00\00\00gh\8D\FD	\87\FC>gh\8D\FD	\87\FC>0)r\00\00\00r\00\00\00\FA<built-in method posix.system>)r\00\00\00r\00\00\00g7Ko?g7Ko?{0)r\00\00\00r\00\00\00\FA,<method '__exit__' of '_io._IOBase' objects>)r&\00\00\00r&\00\00\00g\96I\D3\FE\D9\EF>g\96I\D3\FE\D9\EF>{\A9\FA-/home/gg/PycharmProjects/ProjetJC/FICHIERS.py\E9)\00\00\00\DAlecture_Fichiers_RAM)r&\00\00\00r&\00\00\00g\96I\D3\FE

Merci d'avance à ceux qui m'ont lu.

Note aux modérateurs, quand j'ai voulu envoyer ce message, le système m'a dit que je n'avais pas les autorisations nécessaires. Il m'a fallu me reconnecter. Je l'ai fais, et cela a marché. Mais le résultat est que mon message apparaît deux fois. Merci de bien vouloir en détruire un.

Dernière modification par candide_du_2b (Le 14/11/2022, à 14:13)

Hors ligne

#2 Le 13/11/2022, à 06:44

xubu1957

Re : Comment utiliser cProfile avec Python

Bonjour,

Comme demandé dans le premier message du tutoriel Retour utilisable de commande

Pour ajouter toi-même les balises code à ton précédent message #1 :

  • Cliquer sur  le lien « Modifier » en bas à droite du message

  • Sélectionner le texte

  • Cliquer sur le <> de l'éditeur de message

moko138 a écrit :

1) Les balises-code sont les < > (crochets bleus) de la barre de mise en forme.

1642675956.jpg
3) /!\  Si vous avez plusieurs retours à donner, séparez-les bien (toujours pour la lisibilité) :

comme
cela.
# ! /usr/bin/env python3
# -*- coding: utf-8 -*-
import time
from gui import *
import FONC
import DONNES
import FICHIERS
import os

import cProfile
profiler = cProfile.Profile()
profiler.enable()
result = JTC            #   JTC.py est le script principal
profiler.disable()
\FB)\FA~\E9\00\00\00\00\FA"<method 'items' of 'dict' objects>)\E9\00\00\00r\00\00\00g\FBlӎ\D1\F0\CC>g\FBlӎ\D1\F0\CC>{\A9\FA'/usr/lib/python3.10/tkinter/__init__.pyi\D9\00\00\DA_options)\E9
\00\00\00r\00\00\00g\9F\A9\91\CA>g\9F\A9\91\CA>\A9r\00\00\00i\B7\00\00\DA__init__)\E9\00\00\00r\00\00\00g7\EF\A2)\E7\FD\92>g7\EF\A2)\E7\FD\92>0)r\00\00\00r\00\00\00\FA#<method 'update' of 'dict' objects>)\E9\00\00\00r
\00\00\00g\D3\C9O3o\98\E2>g\D3\C9O3o\98\E2>{\A9r\00\00\00\E9e\00\00\00\DA    _cnfmerge)r
\00\00\00r
\00\00\00g\D3\C9O3o\98\E2>g\D3\C9O3o\98\E2>0)r\00\00\00r\00\00\00\FA#<method 'append' of 'list' objects>)r\00\00\00r\00\00\00g6\91\F7|]\9C>g6\91\F7|]\9C>{\A9r\00\00\00i\00\00\DA    _register)r\00\00\00r\00\00\00g6\91\F7|]\9C>g6\91\F7|]\9C>0)r\00\00\00r\00\00\00\FA#<built-in method builtins.callable>)\E9\00\00\00r\00\00\00gzqE\D6\D8-\CB>gzqE\D6\D8-\CB>{r\00\00\00)r
\00\00\00r
\00\00\00g"O\CF\B2Y\C9>g"O\CF\B2Y\C9>r   
\00\00\DA_create)r\00\00\00r\00\00\00g|4[\CDȍ\D3>g|4[\CDȍ\D3>0)r\00\00\00r\00\00\00\FA <built-in method builtins.print>)r\00\00\00r\00\00\00gDžkΑ?gDžkΑ?{0)r\00\00\00r\00\00\00\FA<built-in method builtins.repr>)r\00\00\00r\00\00\00g+yGV6\C7>g+yGV6\C7>{r\00\00\00)r\00\00\00r\00\00\00g+yGV6\C7>g+yGV6\C7>0)r\00\00\00r\00\00\00\FA <built-in method builtins.round>)r\00\00\00r\00\00\00g\95Ӆ\F5\D2V\DD>g\95Ӆ\F5\D2V\DD>{0)r\00\00\00r\00\00\00\FA<built-in method posix.stat>)\E9\00\00\00r&\00\00\00gh\8D\FD    \87\FC>gh\8D\FD    \87\FC>{\A9\FA"/usr/lib/python3.10/genericpath.py\E9\00\00\00\DAisfile)r&\00\00\00r&\00\00\00gh\8D\FD    \87\FC>gh\8D\FD    \87\FC>0)r\00\00\00r\00\00\00\FA<built-in method posix.system>)r\00\00\00r\00\00\00g7Ko?g7Ko?{0)r\00\00\00r\00\00\00\FA,<method '__exit__' of '_io._IOBase' objects>)r&\00\00\00r&\00\00\00g\96I\D3\FE\D9\EF>g\96I\D3\FE\D9\EF>{\A9\FA-/home/gg/PycharmProjects/ProjetJC/FICHIERS.py\E9)\00\00\00\DAlecture_Fichiers_RAM)r&\00\00\00r&\00\00\00g\96I\D3\FE

Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Résolu] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.                   Membre de Linux-Azur

En ligne

#3 Le 13/11/2022, à 15:49

candide_du_2b

Re : Comment utiliser cProfile avec Python

Merci, c'est plus lisible ainsi, j'en conviens.
Peut-être que cela apportera une réponse à ma question et m'évitera de coller une multitude de print() un peu partout dans mon code en guise de traces de debogage...

Hors ligne

#4 Le 13/11/2022, à 15:54

xubu1957

Re : Comment utiliser cProfile avec Python

Tu dois corriger ton message, je t'ai indiqué la méthode.

Pour info > memento des balises code pour aider les aidants.


Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Résolu] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.                   Membre de Linux-Azur

En ligne

#5 Le 14/11/2022, à 14:23

candide_du_2b

Re : Comment utiliser cProfile avec Python

OK J'utilise le navigateur "Brave" et je n'avais pas java script activé. Et la barre d'outils de l'éditeur ne s'affichait pas.
A noter toutefois que j'avais choisi une portion de code sans identation, et de ce fait mon "code" était lisible.
Je vais donc aller sur un forum plus spécialisé, merci pour l'aide très généreuse et j' ajouterais sans ironie : très complète, que vous m'avez apportée.

Hors ligne