Retour à la leçon
Mission

Mission : arrêter la fuite de connexions d'un traitement par lot

Remplacer une ouverture de connexion sans nettoyage garanti par un vrai context manager, et comprendre le rôle exact de la valeur de retour de __exit__.

Contexte

Une fonction traiter_lot(donnees) ouvre une connexion avec conn = ConnexionBDD("postgres://prod") (sans with), traite les données, puis appelle conn.fermer() à la toute dernière ligne. Le jour où une ligne de données invalide lève une exception au milieu du traitement, fermer() n'est jamais atteint et la connexion reste ouverte, jusqu'à épuiser le pool de connexions du serveur.

Tu dois corriger ce code avec with, comprendre précisément ce qui se passerait si __exit__ retournait True par erreur, puis convertir un context manager en une fonction génératrice avec @contextmanager.