¿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?
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).
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.
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.
Respuestas:
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.
fuente