¿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?


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.