Que se passera-t-il si je modifie un script Python pendant son exécution?

219

Imaginez un script python qui prendra beaucoup de temps à exécuter, que se passera-t-il si je le modifie pendant son exécution? Le résultat sera-t-il différent?

wong2
la source
8
Le programme est chargé dans votre mémoire principale. Si vous modifiez le fichier source, rien ne se produit. Imaginez que le CPU lise les instructions du disque dur ...
Felix Kling
15
@Felix: Cela s'appelle "Execute-in-Place" (XIP).
Ignacio Vazquez-Abrams
@Ignacio: Intéressant, je ne le savais pas. Merci :)
Felix Kling
3
Vous pouvez recharger dynamiquement le code des modules, voir stackoverflow.com/questions/437589/…
Iliyan Bobev
2
Notez que les fichiers de commandes de Windows n'exécutent en place, donc ce n'est pas une question hypothétique, il y a des langues là - bas qui se comportent de cette façon.
yoyo

Réponses:

259

Rien, car Python précompile votre script dans un fichier PYC et le lance.

Cependant, si une sorte d'exception se produit, vous pouvez obtenir une explication légèrement trompeuse, car la ligne X peut avoir un code différent qu'avant de démarrer le script.

Lixas
la source
10
Pas nécessairement dans un fichier.
Ignacio Vazquez-Abrams
60
Mais que se passe-t-il si vous relancez en cours d'exécution, lorsque les nouveaux fichiers pyc écraseront l'ancien, cela causera-t-il des problèmes dans le programme qui était déjà en cours d'exécution ou non?
deceleratedcaviar
26
Rien ne se passe. Je l'ai également vérifié dans un petit test. Ce qui se passe: le pyc n'est que le compilé. Et cette compilation est chargée dans la RAM puis exécutée. Il est donc toujours possible de modifier le programme, de recompiler et d'exécuter une autre instance, par exemple dans une autre console.
Chris
7
@Chris J'ai démarré une instance de mon script python dans une console. Pendant l'exécution, j'ai changé deux lignes de code et démarré une autre instance dans une console distincte. Après un certain temps, j'ai reçu une erreur de la première console concernant les deux lignes de code que j'ai modifiées après l'avoir démarrée! pls help
double_j
14
@Chris Je pense que je sais ce qui se passe ici. Si vous modifiez un script et enregistrez-le pendant son exécution, ainsi que les erreurs de la version précédente, dans la lecture de traceback, il ouvre la version actuelle du fichier et rend la traceback différente de celle au début. Je l'ai vu moi-même à plusieurs reprises.
double_j