¿Qué sucederá si modifico un script de Python mientras se está ejecutando?

219

Imagine un script de Python que tardará mucho tiempo en ejecutarse, ¿qué sucederá si lo modifico mientras se está ejecutando? ¿El resultado será diferente?

wong2
fuente
8
El programa se carga en su memoria principal. Si cambia el archivo fuente, no pasa nada. Imagine que la CPU leería las instrucciones del disco duro ...
Felix Kling
15
@Felix: Eso se llama "Ejecutar en el lugar" (XIP).
Ignacio Vazquez-Abrams
@Ignacio: Interesante, no lo sabía. Gracias :)
Felix Kling
3
Puede recargar dinámicamente el código de los módulos, consulte stackoverflow.com/questions/437589/…
Iliyan Bobev
2
Tenga en cuenta que los archivos por lotes de Windows no se ejecutan en el lugar, así que esto no es una pregunta hipotética, hay lenguas que hay que comportarse de esta manera.
yoyo

Respuestas:

259

Nada, porque Python precompila su script en un archivo PYC y lo inicia.

Sin embargo, si se produce algún tipo de excepción, puede obtener una explicación ligeramente engañosa, porque la línea X puede tener un código diferente que antes de iniciar el script.

Lixas
fuente
10
No necesariamente en un archivo.
Ignacio Vazquez-Abrams
6060
Pero, ¿qué sucede si vuelve a iniciar mientras se ejecuta, cuando los nuevos archivos pyc sobrescriben a los antiguos, eso causará problemas en el programa que ya se estaba ejecutando o no?
Caviar desacelerado
26
No pasa nada. También lo revisé en una pequeña prueba. Lo que sucede: la pyc es solo la compilación. Y este compilado se carga en la RAM y luego se ejecuta. Por lo tanto, siempre es posible cambiar el programa, volver a compilar y ejecutar otra instancia, por ejemplo, en una consola diferente.
Chris
77
@ Chris Comencé una instancia de mi script de Python en una consola. Mientras eso se estaba ejecutando, cambié dos líneas de código y comencé otra instancia en una consola separada. ¡Después de un tiempo, recibí un error de la primera consola sobre las dos líneas de código que cambié después de iniciarlo! pls help
double_j
14
@ Chris Creo que sé lo que pasa aquí. Si modifica un script y lo guarda mientras se está ejecutando, y los errores de la versión anterior, en la lectura de rastreo, abre la versión actual del archivo y hace que el rastreo se vea diferente de cuando comenzó. Lo he visto en varias ocasiones.
double_j