Cosa succederà se modifico uno script Python mentre è in esecuzione?


219

Immagina uno script Python che richiederà molto tempo per essere eseguito, cosa accadrà se lo modifico mentre è in esecuzione? Il risultato sarà diverso?


8
Il programma viene caricato nella memoria principale. Se si modifica il file di origine, non accade nulla. Immagina che la CPU legga le istruzioni dal disco rigido ...
Felix Kling

15
@Felix: si chiama "Execute-in-Place" (XIP).
Ignacio Vazquez-Abrams,

@Ignacio: Interessante, non lo sapevo. Grazie :)
Felix Kling

3
Si può ricaricare il dinamicamente il codice dei moduli, vedere stackoverflow.com/questions/437589/...
Iliyan Bobev

2
Si noti che i file batch di Windows non vengono eseguiti sul posto, quindi questo non è una domanda ipotetica, ci sono lingue là fuori che si comportano in questo modo.
yoyo

Risposte:


259

Niente, perché Python precompila lo script in un file PYC e lo avvia.

Tuttavia, se si verifica un tipo di eccezione, è possibile che venga fornita una spiegazione leggermente fuorviante, poiché la riga X potrebbe avere un codice diverso rispetto a prima dell'avvio dello script.


10
Non necessariamente in un file.
Ignacio Vazquez-Abrams,

60
Ma cosa succede se si riavvia durante l'esecuzione, quando i nuovi file pyc sovrascrivono il vecchio, ciò causerà problemi nel programma che era già in esecuzione o no?
deceleratedcaviar

26
Non succede niente. L'ho anche verificato in un piccolo test. Cosa succede: il pyc è solo il compilato. E questo compilato viene caricato nella RAM e quindi eseguito. Quindi è sempre possibile modificare il programma, ricompilare ed eseguire un'altra istanza, ad esempio in una console diversa.
Chris,

7
@Chris Ho avviato un'istanza del mio script Python in una console. Mentre era in esecuzione, ho modificato due righe di codice e ho avviato un'altra istanza in una console separata. Dopo un po ', ho ricevuto un errore restituito dalla prima console sulle due righe di codice che ho cambiato dopo averlo avviato! pls help
double_j

14
@ Chris Penso di sapere cosa succede qui. Se si modifica uno script e si salva mentre è in esecuzione, e gli errori della versione precedente, nella lettura del traceback, apre la versione corrente del file e rende il traceback diverso da quando è stato avviato. L'ho visto anche io in diverse occasioni.
double_j
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.