Question

J'ai hérité l'entretien de certains calcul scientifique en utilisant Python parallèle sur un cluster. Avec Python parallèle, les travaux sont soumis à un ppserver, qui (dans ce cas) parle aux processus de ppserver déjà en cours d'exécution sur d'autres ordinateurs, des tâches concoctera aux processus de ppworkers.

Je voudrais utiliser le module d'enregistrement de la bibliothèque standard pour enregistrer les erreurs et les informations de débogage des fonctions qui se soumis à un ppserver. Étant donné que ces ppworkers fonctionnent comme des processus séparés (sur des ordinateurs distincts) Je ne suis pas sûr de savoir comment structurer correctement l'exploitation forestière. Dois-je me connecter à un fichier séparé pour chaque processus? Peut-être il y a un gestionnaire de journal qui ferait tout mieux?

En outre, je veux des rapports sur ce processus sur quel ordinateur a frappé une erreur, mais le code que j'écris l'enregistrement en est sans doute pas au courant de ces choses; peut-être que devrait se produire au niveau ppserver?

(version du cross-posté question sur les forums Python parallèle, je vais poster une réponse ici si je reçois quelque chose à ce sujet d'un utilisateur non SO)

Était-ce utile?

La solution

Une façon de résoudre votre problème est de faire ce qui suit:

  1. Dans chaque processus de travail, utilisez un logging.handlers.SocketHandler pour envoyer des événements du travailleur à un processus d'enregistreur dédié.
  2. Créer un procédé d'enregistreur dédié qui écoute les événements de l'exploitation forestière sur une douille, sur la base de l'exemple de travail donné dans la documentation à https://docs.python.org/3/howto/logging-cookbook.html#sending-and-receiving -Enregistrement-événements à travers-un-réseau
  3. Profit; -)

Si vous attrapez des exceptions dans vos fonctions de travail et les n'êtes pas connecté, vous devriez être en mesure d'obtenir une visibilité des erreurs dans tous les travailleurs en un seul endroit.

Autres conseils

J'utilise logging Python et les API socket. Il suffit de suivre l'exemple ici .

Il suffit de démarrer un ppworker dédié à l'exploitation forestière quelque part, et de créer une nouvelle logging.Logger dans chacun des autres travailleurs avec un logging.SocketHandler spécifiant le nom d'hôte et le port de la machine exécutant le ppworker de l'exploitation forestière.

Si vous avez un serveur exécutant syslog, vous pouvez également utiliser le module syslog Python, qui est documenté ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top