Retour à la leçonMission
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.