Registrazione processi di lavoro con parallela Python
-
25-09-2019 - |
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)
Soluzione
Un modo per risolvere il tuo problema è quello di effettuare le seguenti operazioni:
- In ogni processo di lavoro, utilizzare un
logging.handlers.SocketHandler
per inviare gli eventi dal lavoratore ad un processo logger dedicato. - 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
- 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 .