Qualcosa a cui ho appena pensato:Cosa succede quando hai un ciclo infinito nel codice della vista Django?
Dire che sto scrivendo il codice di visualizzazione per il mio sito Django, e faccio un errore e creo un ciclo infinito.
Ogni volta che qualcuno tenta di accedere alla vista, il worker assegnato alla richiesta (sia esso un Gevent worker o un thread Python) resterebbe in un ciclo indefinito.
Se ho capito bene, il server avrebbe inviato un errore di timeout al client dopo 30 secondi. Ma cosa succederà con l'operatore Python? Continuerà a lavorare indefinitamente? Sembra pericoloso!
Immagina di avere un server in cui sono stati assegnati 10 dipendenti. Lascio correre e ad un certo punto, un client tenta di accedere alla vista con il ciclo infinito. A quest'ultimo verrà assegnato un worker e sarà effettivamente morto fino al successivo riavvio del server. La cosa pericolosa è che inizialmente non lo noterei, perché il sito sarebbe semplicemente impercettibilmente più lento, con 9 operai invece di 10. Ma poi potrebbe succedere ancora e ancora per un lungo lasso di tempo, forse mesi. Il sito diventerebbe progressivamente più lento, finché alla fine sarebbe davvero lento con un solo lavoratore.
Un riavvio del server risolverebbe il problema, ma non mi piacerebbe che la funzionalità del mio sito dipenda dal riavvio del server.
Si tratta di un problema reale? C'è un modo per evitarlo?
Aggiornamento: Mi piacerebbe anche davvero apprezzare un modo per prendere uno stacktrace del filo/lavoratore che è bloccato in un loop infinito, così ho potuto avere quel inviato via email a me così io sarò a conoscenza del problema . (Non so come farlo perché non viene sollevata alcuna eccezione.)
Aggiornamento alle persone che dicono le cose all'effetto di "Evita di scrivere codice che ha loop infiniti": Nel caso in cui non fosse ovvio, non passo il mio tempo libero intenzionalmente a inserire loop infiniti nel mio codice. Quando accadono queste cose, sono errori e gli errori possono essere minimizzati ma mai completamente evitati. Voglio sapere che anche quando commetto un errore, ci sarà una rete di sicurezza che mi avviserà e mi consentirà di risolvere il problema.
lettura interessante: http: // StackOverflow. it/questions/8685695/how-do-i-run-lungo-infinito-python-process –
Ho aggiornato la mia risposta, spero che risponda alla tua domanda ora :) –