Titre RNCP Niveau 7

Maîtrisez pipelines, cloud & IA pour devenir Data Engineer opérationnel.

Devenez Data Engineer

DataScientist.fr

Formations

L'équipeLa plateforme
Offre entreprises

🇫🇷

Mesurer le temps d'exécution avec time et datetime - Tutoriel pratique en Python
Python

Mesurer le temps d'exécution avec time et datetime - Tutoriel pratique en Python

Romain DE LA SOUCHÈRE

Lead Developer, Expert Cloud et DevOps

Publié le 2 janvier 2025 · 8 min de lecture

Dans un monde où chaque seconde compte, maîtriser l'art de la gestion du temps est devenu essentiel. Que ce soit pour optimiser les performances ou simplement pour respecter un emploi du temps chargé, les minuteries se révèlent être des outils précieux. Cet article explore diverses manières d'incorporer des minuteries dans vos projets, en vous guidant à travers des techniques allant de la création de votre propre minuterie à l'utilisation de gestionnaires de contexte et de décorateurs. Découvrez comment ces outils peuvent transformer votre approche de la productivité.

Minuteries

Les minuteries en Python sont des outils essentiels pour surveiller et optimiser le temps d'exécution de votre code. Elles vous permettent de mesurer la durée des processus individuels, ce qui est crucial pour identifier les goulots d'étranglement et améliorer l'efficacité. Dans cette section, nous allons explorer trois méthodes principales pour implémenter des minuteries en Python.

Utilisation de time.time()

La méthode la plus simple pour mesurer le temps en Python est d'utiliser la fonction time.time(). Cette fonction retourne le temps écoulé en secondes depuis l'époque (le 1er janvier 1970). Voici comment l'utiliser :
python
Cette méthode est facile à mettre en œuvre, mais elle peut être affectée par la résolution limitée du système d'exploitation, ce qui la rend moins précise pour des mesures très courtes.

Utilisation de timeit

Le module timeit est conçu pour fournir des mesures plus précises, en répétant l'exécution du code et en calculant la moyenne pour réduire l'impact des fluctuations. Voici un exemple d'utilisation de timeit :
python
Avec timeit, vous pouvez spécifier le nombre de fois que le code doit être exécuté, ce qui est utile pour obtenir des résultats fiables. Cependant, cette méthode est généralement plus complexe à configurer que time.time().

Utilisation de datetime

Une autre approche consiste à utiliser le module datetime pour créer des objets temporels et calculer la différence entre eux. Cette méthode est particulièrement utile si vous avez besoin d'un format de temps plus lisible ou si vous voulez inclure des dates dans vos mesures :
python
Avec datetime, le temps écoulé est retourné sous forme d'un objet timedelta, ce qui vous permet d'obtenir des informations détaillées, comme les jours, les secondes, et les microsecondes.
Chacune de ces méthodes a ses propres avantages et inconvénients selon le contexte d'utilisation. Il est crucial de choisir la méthode qui répond le mieux à vos besoins spécifiques en termes de précision et de simplicité.

Votre première minuterie

Créer votre première minuterie Python est une étape essentielle pour devenir plus efficace dans l'optimisation de votre code. Dans cette section, nous allons construire une minuterie simple en utilisant la fonction time.time(), puis nous explorerons comment intégrer cette fonctionnalité dans un programme plus complexe.

Mise en place de la minuterie

La première étape consiste à mettre en place une minuterie basique pour mesurer la durée d'exécution d'un bloc de code. Voici comment procéder :
python
Ce script simple encapsule une fonction dont vous souhaitez mesurer la durée. Il utilise time.time() pour enregistrer le temps avant et après l'exécution du code.
Avec ces outils, vous êtes maintenant équipé pour surveiller et optimiser efficacement le temps d'exécution de votre code Python. Cette compétence est essentielle pour garantir la performance de vos programmes, en particulier dans des environnements de production où chaque milliseconde compte.

Une classe de minuterie

Pour une approche plus modulaire et réutilisable de la surveillance du temps d'exécution, vous pouvez créer une classe de minuterie. Cela vous permettra de gérer plusieurs minuteries dans un même programme et de mieux structurer votre code.

Création de la classe Minuterie

Commençons par définir une classe Minuterie qui encapsule la logique de mesure du temps :
python
Cette classe Minuterie comprend trois méthodes principales : start pour démarrer la minuterie, stop pour l'arrêter, et elapsed_time pour calculer le temps écoulé entre les deux.

Utilisation de la classe Minuterie

Voyons comment utiliser cette classe dans un programme :
python
Avec cette structure, vous pouvez facilement créer plusieurs instances de Minuterie pour mesurer différentes parties de votre programme en parallèle, ce qui est très utile pour les applications complexes.

Avantages d'une classe de minuterie

L'utilisation d'une classe de minuterie offre plusieurs avantages :
  • Modularité : Vous pouvez gérer plusieurs instances indépendamment, ce qui améliore la lisibilité et la maintenance du code.
  • Réutilisabilité : La classe peut être importée et utilisée dans différents projets sans modifications supplémentaires.
  • Extensibilité : Vous pouvez facilement ajouter des fonctionnalités, comme le stockage des temps d'exécution dans un fichier ou l'intégration avec des outils de monitoring.
En utilisant une classe de minuterie, vous pouvez transformer votre gestion du temps en une partie intégrante et efficace de votre développement Python.

Un gestionnaire de contexte

L'une des manières les plus élégantes de gérer les minuteries en Python est d'utiliser un gestionnaire de contexte. Cela vous permet de surveiller le temps d'exécution d'un bloc de code en utilisant le mot-clé with, ce qui rend le code plus propre et plus lisible.

Création d'un gestionnaire de contexte

Pour créer un gestionnaire de contexte pour une minuterie, vous pouvez utiliser la classe Minuterie que nous avons définie précédemment et la transformer en gestionnaire de contexte en implémentant les méthodes spéciales enter et exit :
python
Dans cette version de la minuterie, enter démarre la minuterie, et exit l'arrête, puis calcule et affiche le temps écoulé. Les paramètres exc_type, exc_val, et exc_tb sont utilisés pour gérer les exceptions, si nécessaire.

Utilisation du gestionnaire de contexte

Voyons comment utiliser ce gestionnaire de contexte dans un programme :
python
En utilisant le bloc with, vous encapsulez le code que vous souhaitez mesurer, et la minuterie s'occupe automatiquement de démarrer et d'arrêter le chronométrage.

Avantages du gestionnaire de contexte

Les gestionnaires de contexte offrent plusieurs avantages :
  • Simplicité : Le code est plus concis et évite les erreurs de démarrage ou d'arrêt manuel de la minuterie.
  • Gestion des exceptions : Le bloc with gère les exceptions, ce qui garantit que la minuterie s'arrête même en cas d'erreur dans le code surveillé.
  • Lisibilité : Le code est plus lisible et intuitif, ce qui facilite sa compréhension et sa maintenance.
En utilisant un gestionnaire de contexte, vous pouvez intégrer facilement et efficacement la surveillance du temps d'exécution dans vos projets Python, en garantissant clarté et robustesse du code.

Un décorateur

Les décorateurs Python sont des outils puissants qui permettent de modifier le comportement des fonctions ou des méthodes. Lorsqu'il s'agit de mesurer le temps d'exécution, un décorateur peut simplifier le processus en enveloppant automatiquement le code que vous souhaitez surveiller.

Création d'un décorateur de minuterie

Pour créer un décorateur qui mesure le temps d'exécution, vous pouvez utiliser la fonction suivante :
python
Ici, minuterie est un décorateur qui prend une fonction en entrée et retourne une nouvelle fonction wrapper. Cette fonction wrapper mesure le temps avant et après l'exécution de la fonction originale et affiche le temps écoulé.

Utilisation du décorateur

Pour appliquer ce décorateur à une fonction, utilisez le symbole @ suivi du nom du décorateur, juste avant la définition de la fonction :
python
Avec cette approche, la fonction ma_fonction est automatiquement enveloppée par le décorateur, ce qui signifie que chaque fois que vous l'appelez, son temps d'exécution est mesuré et affiché.

Avantages du décorateur

Les décorateurs offrent plusieurs avantages :
  • Automation : Ils automatisent le processus de mesure du temps, éliminant le besoin de répéter manuellement le code de minutage.
  • Réutilisabilité : Le décorateur peut être facilement appliqué à n'importe quelle fonction sans modifier son code interne.
  • Simplicité : L'utilisation de @minuterie rend le code plus propre et plus facile à lire, surtout lorsqu'il est appliqué à plusieurs fonctions dans un projet.
Les décorateurs sont une excellente solution pour surveiller efficacement le temps d'exécution dans vos projets Python, offrant une approche modulaire et élégante à l'optimisation du code.

Autres fonctions de minuterie

En plus des méthodes que nous avons abordées, il existe d'autres fonctions et outils pour mesurer le temps d'exécution en Python. Ces outils peuvent être particulièrement utiles dans des situations spécifiques ou lorsque vous avez besoin de fonctionnalités avancées.

Utilisation de perf_counter

Le module time offre la fonction perf_counter, qui est souvent plus précise que time.time(). Cette fonction est idéale pour mesurer des intervalles courts, car elle utilise le compteur le plus précis disponible sur votre système :
python
perf_counter est particulièrement recommandé pour les mesures de performance car il inclut le temps passé pendant que le système est en veille.

Utilisation de process_time

Si vous êtes intéressé par le temps CPU utilisé par le processus Python, process_time est la fonction adéquate. Contrairement à perf_counter, elle ne prend pas en compte le temps pendant lequel le programme est inactif :
python
Cette mesure est idéale pour analyser l'utilisation des ressources CPU dans des scripts computationnels intensifs.

Utilisation de bibliothèques tierces

Pour des besoins plus complexes, il existe des bibliothèques tierces comme cProfile et line_profiler. Ces outils offrent une analyse détaillée des performances :
  • cProfile : Fournit une vue d'ensemble des performances du programme en listant le temps d'exécution de chaque fonction.
  • line_profiler : Offre une granularité encore plus fine en analysant le temps d'exécution ligne par ligne.
Ces outils sont particulièrement précieux pour optimiser des applications complexes et pour identifier précisément les lignes de code qui ralentissent votre programme.
Chaque méthode ou outil a ses propres avantages et se prête à des cas d'utilisation spécifiques. Choisir la bonne approche dépend de la précision requise et du contexte dans lequel vous travaillez, vous permettant ainsi d'optimiser efficacement vos projets Python.

Conclusion

En conclusion, mesurer le temps d'exécution en Python est une compétence essentielle pour optimiser la performance de vos programmes. Que vous utilisiez des fonctions simples comme time.time() ou des outils plus avancés comme perf_counter, il est crucial de choisir l'approche qui correspond le mieux à vos besoins spécifiques.

Recapitulatif des méthodes

Nous avons exploré plusieurs méthodes pour implémenter des minuteries :
  • Minuteries basiques avec time.time() pour une simplicité d'utilisation.
  • Classes de minuterie pour une modularité et une extensibilité accrues.
  • Gestionnaires de contexte pour une intégration élégante et sécurisée.
  • Décorateurs pour une automatisation et une réutilisabilité efficaces.
  • Fonctions avancées comme perf_counter et process_time pour des mesures précises et adaptées à des contextes spécifiques.

Vers une optimisation continue

Utiliser ces techniques vous permettra non seulement de surveiller le temps d'exécution, mais aussi d'identifier les goulots d'étranglement dans votre code. L'optimisation continue de vos programmes, grâce à une analyse précise des performances, est vitale pour assurer la réactivité et l'efficacité de vos applications.
En intégrant ces outils dans votre flux de travail, vous pouvez transformer votre approche de développement, en veillant à ce que chaque ligne de code soit aussi performante que possible. Ainsi, vous serez mieux préparé pour relever les défis de performance dans vos projets actuels et futurs.

Partager avec

💙 Merci d'avoir parcouru l'article jusqu'à la fin !

Romain DE LA SOUCHÈRE

Romain DE LA SOUCHÈRE - Lead Developer, Expert Cloud et DevOps

Ingénieur de formation avec plus de 11 ans d'expérience dans le développement back-end et le data engineering. Expert dans l’industrialisation des projets data dans le cloud.

» En savoir plus

Formations associés

Toutes nos formations

Préparez la certification PL‑300
Préparez la certification PL‑300
24 heures
Débutant
Garantie
Préparez la certification AZ-900
Préparez la certification AZ-900
10 heures
Débutant
Garantie
Préparez la certification DP‑700
Préparez la certification DP‑700
24 heures
Débutant
Garantie
Préparez la certification DP‑900
Préparez la certification DP‑900
10 heures
Débutant
Garantie

DataScientist.fr

By AXI Technologies

128 Rue de la Boétie,
75008, Paris, France

bonjour@datascientist.fr

+33 1 70 39 08 31

+33 6 86 99 34 78

© 2026 DataScientist.fr - AXI Technologies - Tous droits réservés