Maison >développement back-end >Tutoriel Python >Comment obtenir une journalisation robuste dans les applications multitraitements Python ?

Comment obtenir une journalisation robuste dans les applications multitraitements Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-29 00:18:02592parcourir

How to Achieve Robust Logging in Python Multiprocessing Applications?

Journalisation avec le multitraitement en Python : une solution robuste

Lors de l'utilisation du module multitraitement de Python, la journalisation devient plus complexe en raison du manque de processus. des verrous partagés pour l'enregistreur compatible multitraitement, conduisant potentiellement à une sortie sys.stderr brouillée.

Pour relever ce défi, une approche alternative consiste à créer un gestionnaire de journaux personnalisé qui dirige la sortie vers le processus parent via un canal. Cette méthode s'appuie sur une file d'attente pour gérer la concurrence et récupérer des erreurs. L'implémentation fournie garantit une journalisation stable dans les environnements de production.

Le gestionnaire personnalisé, MultiProcessingLog, étend la classe logging.Handler et exploite un RotatingFileHandler pour gérer la journalisation basée sur les fichiers. Il établit un canal entre les processus parent et enfant, permettant un stockage centralisé des journaux.

Détails de mise en œuvre :

Le gestionnaire MultiProcessingLog utilise un thread distinct pour recevoir les enregistrements de journaux. à partir des processus enfants et transmettez-les au RotatingFileHandler dans le processus parent. Cela garantit que les messages de journal sont correctement formatés et écrits vers la destination prévue.

Pour envoyer des enregistrements de journal, la méthode d'envoi est utilisée, tandis que le thread de réception surveille en permanence le canal pour détecter de nouveaux enregistrements et les transmet au _handler.

Pour minimiser le risque que des objets impossibles à décaper provoquent des problèmes, le gestionnaire chaîne les valeurs exc_info et args dans l'enregistrement du journal avant de l'envoyer via le canal.

La méthode submit est remplacée pour envelopper l'appel _format_record dans un bloc try-sauf pour garantir que tout échec est traité de manière appropriée.

Ce gestionnaire de journalisation personnalisé fournit une solution fiable pour la gestion des journaux dans les applications multitraitements, offrant des capacités de stockage centralisé des journaux et de récupération des erreurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn