Défi
Énoncé
Écrire un décorateur chrono qui enveloppe n'importe quelle fonction, mesure le temps écoulé pendant son exécution et imprime sur stderr un message de la forme "[chrono] nom_fonction : 42.31 ms" (deux décimales). La valeur de retour de la fonction originale doit être préservée. Démontrer avec une fonction calcul_lourd qui effectue une somme sur un grand nombre d'entiers.
Contraintes
- Python ≥ 3.6.
- Utiliser
time.perf_counter()pour la mesure. - Utiliser
functools.wrapspour préserver les métadonnées (__name__,__doc__) de la fonction décorée. - La sortie de chronométrage va sur
sys.stderr, la sortie normale sursys.stdout. - Format stderr :
[chrono] <nom> : <durée> msavec exactement deux décimales. - Bibliothèque standard uniquement (
time,functools,sys).
Exemple
Sur calcul_lourd(10_000_000), la sortie standard porte la valeur de retour,
préservée par le décorateur :
49999995000000
Et la sortie d'erreur porte la mesure, dont la durée varie :
[chrono] calcul_lourd : 187.45 ms
Le nom affiché doit être calcul_lourd, pas wrapper : c'est ce que vérifie
la préservation des métadonnées.