実行中に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.