Domanda

Ho ereditato la manutenzione di alcuni calcolo scientifico utilizzando parallela Python in un cluster. Con Parallel Python, i lavori vengono sottoposti ad un ppserver, che (in questo caso) parla già in esecuzione processi ppserver su altri computer, spenderanno i compiti fuori ai processi ppworkers.

Mi piacerebbe utilizzare il modulo di registrazione libreria standard per registrare gli errori e le informazioni di debug dalle funzioni che vengono sottoposti a un ppserver. Dal momento che questi ppworkers eseguiti come processi separati (su computer separati) Non sono sicuro di come strutturare correttamente la registrazione. Devo registrare in un file separato per ogni processo? Forse c'è un gestore di registro che renderebbe il tutto meglio?

Inoltre, voglio rapporti su quale processo sul quale computer ha colpito un errore, ma il codice che sto scrivendo la registrazione nel probabilmente non è a conoscenza di queste cose; forse che dovrebbe accadere a livello ppserver?

(La versione della questione cross-postato su Parallel Python Forum, vi posterò una risposta qui se ho qualcosa là di questo da un utente non SO)

È stato utile?

Soluzione

Un modo per risolvere il tuo problema è quello di effettuare le seguenti operazioni:

  1. In ogni processo di lavoro, utilizzare un logging.handlers.SocketHandler per inviare gli eventi dal lavoratore ad un processo logger dedicato.
  2. Creare un processo logger dedicato che ascolti per la registrazione degli eventi su un socket, sull'esempio di lavoro proposta nella documentazione all'indirizzo https://docs.python.org/3/howto/logging-cookbook.html#sending-and-receiving -Registrazione-eventi-across-a-rete
  3. Profit; -)

Se si cattura eccezioni nelle funzioni dei lavoratori e l'accesso di loro, allora si dovrebbe essere in grado di ottenere la visibilità di errori in tutti i lavoratori in un unico luogo.

Altri suggerimenti

Mi piacerebbe usare API logging e socket di Python. Basta seguire l'esempio qui .

È sufficiente avviare una ppworker dedicato alla registrazione da qualche parte, e creare un nuovo logging.Logger in ciascuno degli altri lavoratori con un logging.SocketHandler specificando il nome host e la porta della macchina che esegue il ppworker registrazione.

Se si dispone di un server che esegue syslog, è anche possibile utilizzare il modulo syslog di Python, che è documentata qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top