Was passiert, wenn ich ein Python-Skript während der Ausführung ändere?

219

Stellen Sie sich ein Python-Skript vor, dessen Ausführung lange dauern wird. Was passiert, wenn ich es während der Ausführung ändere? Wird das Ergebnis anders sein?

wong2
quelle
8
Das Programm wird in Ihren Hauptspeicher geladen. Wenn Sie die Quelldatei ändern, geschieht nichts. Stellen Sie sich vor, die CPU würde Anweisungen von der Festplatte lesen ...
Felix Kling
15
@Felix: Das nennt man "Execute-in-Place" (XIP).
Ignacio Vazquez-Abrams
@Ignacio: Interessant, das wusste ich nicht. Danke :)
Felix Kling
3
Sie können den Code der Module dynamisch neu laden, siehe stackoverflow.com/questions/437589/…
Iliyan Bobev
2
Beachten Sie, dass Windows - Batch - Dateien kann an Ort und Stelle durchführen, so dass dies nicht eine hypothetische Frage ist, gibt es Sprachen gibt , die verhalten sich auf diese Weise.
Yooy

Antworten:

259

Nichts, da Python Ihr Skript in eine PYC-Datei vorkompiliert und diese startet.

Wenn jedoch eine Ausnahme auftritt, erhalten Sie möglicherweise eine leicht irreführende Erklärung, da Zeile X möglicherweise einen anderen Code enthält als vor dem Start des Skripts.

Lixas
quelle
10
Nicht unbedingt in eine Datei.
Ignacio Vazquez-Abrams
60
Aber was ist, wenn Sie während der Ausführung neu starten und die neuen pyc-Dateien die alten überschreiben, wird dies Probleme in dem Programm verursachen, das bereits ausgeführt wurde oder nicht?
Verlangsamte
26
Nichts passiert. Ich habe es auch in einem kleinen Test überprüft. Was passiert: Der Pyc ist nur die Zusammenstellung. Und diese Kompilierung wird in den RAM geladen und dann ausgeführt. So ist es immer möglich, das Programm zu ändern, neu zu kompilieren und eine andere Instanz auszuführen, z. B. in einer anderen Konsole.
Chris
7
@ Chris Ich habe eine Instanz meines Python-Skripts in einer Konsole gestartet. Währenddessen habe ich zwei Codezeilen geändert und eine andere Instanz in einer separaten Konsole gestartet. Nach einer Weile wurde von der ersten Konsole ein Fehler bezüglich der beiden Codezeilen zurückgegeben, die ich nach dem Start geändert habe! pls help
double_j
14
@ Chris Ich glaube ich weiß was hier passiert. Wenn Sie ein Skript ändern und während der Ausführung speichern und die vorherigen Versionsfehler in der Traceback-Anzeige anzeigen, wird die aktuelle Version der Datei geöffnet und der Traceback sieht anders aus als zu Beginn. Ich habe das selbst schon mehrmals gesehen.
double_j