Ho recentemente iniziato a sperimentare l'uso di Python per lo sviluppo web. Finora ho avuto qualche successo usando Apache con mod_wsgi e il framework web Django per Python 2.7. Tuttavia mi sono imbattuto in alcuni problemi con i processi costantemente in esecuzione, l'aggiornamento delle informazioni e così via.Come posso eseguire processi Python a lungo termine (infinito)?
Ho scritto uno script che chiamo "daemonManager.py" che può avviare e arrestare tutti o singoli loop di aggiornamento di Python (Devo chiamarli Daemon?). Lo fa biforcandosi, quindi caricando il modulo per le funzioni specifiche che dovrebbe eseguire e avviare un ciclo infinito. Salva un file PID in /var/run
per tenere traccia del processo. Fin qui tutto bene. I problemi che ho riscontrato sono:
Ogni tanto uno si arresta. Controllo lo
ps
di mattina e il processo è appena finito. Non sono stati registrati errori (sto utilizzando il modulologging
) e sto trattando tutte le eccezioni che riesco a pensare e registrarle. Inoltre, non penso che questi processi di chiusura abbiano qualcosa a che fare con il mio codice, perché tutti i miei processi eseguono codice completamente diverso e escono a intervalli abbastanza simili. Naturalmente potrei sbagliarmi. È normale che i processi Python muoiano solo dopo che sono stati eseguiti per giorni/settimane? Come dovrei affrontare questo problema? Devo scrivere un altro demone che controlli periodicamente se gli altri demoni sono ancora in esecuzione? Cosa succede se quel demone si ferma? Sono in perdita su come gestirlo.Come posso sapere a livello di programmazione se un processo è ancora in esecuzione o no? Sto salvando i file PID in
/var/run
e controllando se il file PID è lì per determinare se il processo è in esecuzione o meno. Ma se il processo muore solo per cause impreviste, il file PID rimarrà. Devo quindi eliminare questi file ogni volta che un processo si blocca (un paio di volte alla settimana), che tipo di sconfigge lo scopo. Immagino che potrei controllare se un processo è in esecuzione al PID nel file, ma cosa succede se un altro processo è iniziato e gli è stato assegnato il PID del processo morto? Il mio demone penserebbe che il processo stia funzionando bene anche se è morto da tempo. Ancora una volta non riesco a capire come affrontarlo.
una soluzione utile su come migliori eseguire processi infinita di Python, si spera anche spargimento po 'di luce sui problemi di cui sopra, accetterò
Sto usando Apache 2.2.14 su una macchina Ubuntu.
La mia versione di Python è 2.7.2
Se si aggiungono alcuni esempi di codice che mostrano il codice per i daemon in crash, potremmo essere in grado di rispondere a specifiche. Per prima cosa, rimuoverei tutto il codice dagli script che trattano il biforcarsi, il monitoraggio, il reindirizzamento, ecc. –
Puoi chiarire se stai forking questi processi daemon dall'applicazione WSGI in esecuzione in mod_wsgi o separatamente. Non si dovrebbe fare la creazione di questo processo da un'applicazione in esecuzione in mod_wsgi. –
Sembra che ci sia molta pubblicità qui. Voglio dire, questa è una domanda ben piazzata, sulla quale viene data una risposta a una tecnologia specifica, a cui viene data un'altra risposta in cui viene replicata di nuovo "Ho anche finito per usare" un'altra tecnologia (competitiva?) ... – citn