O que acontecerá se eu modificar um script Python enquanto estiver em execução?


219

Imagine um script python que levará muito tempo para ser executado. O que acontecerá se eu o modificar enquanto estiver em execução? O resultado será diferente?


8
O programa é carregado na sua memória principal. Se você alterar o arquivo de origem, nada acontece. Imagine a CPU iria ler as instruções do disco rígido ...
— Felix Kling

15
@ Felix: Isso é chamado de "Execute-in-Place" (XIP).
— Ignacio Vazquez-Abrams

@ Ignacio: Interessante, eu não sabia disso. Obrigado :)
— Felix Kling

3
Você pode dinamicamente recarregar o código dos módulos, ver stackoverflow.com/questions/437589/...
— Iliyan Bobev

2
Observe que os arquivos em lote do Windows são executados no local, portanto, essa não é uma pergunta hipotética; existem idiomas por aí que se comportam dessa maneira.
— yoyo

Respostas:


259

Nada, porque o Python pré-compila seu script em um arquivo PYC e o lança.

No entanto, se ocorrer algum tipo de exceção, você poderá obter uma explicação um pouco enganosa, porque a linha X pode ter um código diferente do que antes de iniciar o script.


10
Não necessariamente em um arquivo.
— Ignacio Vazquez-Abrams

60
Mas e se você reiniciar enquanto estiver executando, quando os novos arquivos pyc sobrescreverem os antigos, isso causará problemas no programa que já estava sendo executado ou não?
— Deceleratedcaviar

26
Nada acontece. Eu também verifiquei em um pequeno teste. O que acontece: o pyc é apenas o compilado. E esse compilado é carregado na RAM e depois executado. Portanto, sempre é possível alterar o programa, recompilar e executar outra instância, por exemplo, em um console diferente.
— Chris

7
@ Chris Comecei uma instância do meu script python em um console. Enquanto isso estava em execução, alterei duas linhas de código e iniciei outra instância em um console separado. Depois de algum tempo, recebi um erro retornado do primeiro console sobre as duas linhas de código que eu alterei após iniciá-lo! pls ajuda
— double_j

14
@ Chris Acho que sei o que acontece aqui. Se você modificar um script e salvar enquanto estiver em execução, e os erros da versão anterior, na leitura do traceback, ele abrirá a versão atual do arquivo e fará com que o traceback pareça diferente do que quando você iniciou. Eu já vi isso em várias ocasiões.
— double_j
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.