実行中にPythonスクリプトを変更するとどうなりますか?


219

実行に長い時間がかかるpythonスクリプトを想像してください。実行中にスクリプトを変更するとどうなりますか?結果は異なりますか?


8
プログラムがメインメモリに読み込まれます。ソースファイルを変更しても、何も起こりません。CPUがハードドライブから命令を読み取ることを想像してください...
— Felix Kling

15
@Felix:それは「Execute-in-Place」(XIP)と呼ばれています。
— Ignacio Vazquez-Abrams

@イグナシオ:興味深い、私はそれを知りませんでした。おかげで:)
— フェリックスクリング

3
あなたは動的に参照、モジュールのコードをリロードすることstackoverflow.com/questions/437589/...を
— Iliyan Bobev

2
Windowsバッチファイルは適切に実行されることに注意してください。これは架空の問題ではありません。このように動作する言語が世の中に存在します。
— ヨーヨー

回答:


259

PythonはスクリプトをPYCファイルにプリコンパイルし、それを起動するためです。

ただし、なんらかの例外が発生した場合、スクリプトを開始する前と行Xのコードが異なる可能性があるため、少し誤解を招く説明が表示されることがあります。


10
必ずしもファイルに入れる必要はありません。
— Ignacio Vazquez-Abrams

60
しかし、実行中に再起動した場合、新しいpycファイルが古いpycファイルを上書きすると、すでに実行されているかどうかにかかわらず、プログラムで問題が発生しますか?
— deceleratedcaviar

26
何も起こりません。小さなテストでも確認しました。何が起こるか:pycは単なるコンパイルです。そして、このコンパイルはRAMにロードされて実行されます。したがって、プログラムを変更し、別のインスタンスを別のコンソールなどで再コンパイルして実行することは常に可能です。
— クリス、

7
@Chris 1つのコンソールでPythonスクリプトのインスタンスを開始しました。それが実行されている間に、私は2行のコードを変更し、別のコンソールで別のインスタンスを開始しました。しばらくすると、最初のコンソールから、起動後に変更した2行のコードに関するエラーが返されました。plsのヘルプ
— double_j '26年

14
@クリス私はここで何が起こるか知っていると思います。スクリプトを変更して実行中に保存し、以前のバージョンのエラーが発生した場合、トレースバックの読み出しで、ファイルの現在のバージョンが開き、トレースバックの外観が開始時とは異なります。私はこれを何度か目にしました。
— double_j 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.