システム(およびディスク)の突然の電源切断によるpycの破損を防ぐために、Pythonが特定のpyからpycへのコンパイルフェーズ内でチェックを開始できるかどうか疑問に思っています。システムが復旧したときに、存在する可能性のある pyc の整合性がチェックされ、疑わしいと見なされた場合は再生成されますか?
2 に答える
このメッセージを正しく解釈すると、Python 3.3 は.pyc
別の名前でファイルを作成し、正常に完了すると名前を変更します。私はそれがこの文脈で得られるのと同じくらい「アトミック」(彼らの用語)だと思います、そしてそれは確かに突然のクラッシュや電源の喪失からあなたを守ります. 以前のバージョン (2.* ブランチを含む) は、競合状態と無効な.pyc
ファイルの影響を受けやすいようです。
ただし、ランタイム例外をトリガーせずにファイルが無効になる可能性があるかどうかは別の問題です。問題レポートはすべて、インポートの失敗について語っています。
私の知る限り、コンパイルからバイトコードへのプロセスは、make
再コンパイルの処理方法において通常と同じように機能します。コンパイルされたファイルがソース ファイルよりも古いかどうかをチェックし、古い場合は再コンパイルし、そうでない場合はそのままにします。私の最善の提案は、突然の停電が疑われるときはいつでも PYC ファイルをクリアし、インポートを実行して新しいファイルを取得することです (おそらく、これを自動化して簡単にすることもできます)。
ディスクに書き込む前に Python がバイトコード ファイルが完了するまで待機するかどうかを確認する実験は行っていないことに注意してください。もしそうなら、実際のコンパイル中に電源障害が発生した場合、PYCファイルはそもそもディスクに書き込まれないため、あなたが話している種類の破損の可能性が減少します. ただし、ほとんどの OS は、ファイル ハンドルが閉じられたときではなく、書き込みアクセスでファイルが開かれたときにファイルの変更時刻を更新すると考えているため、書き込み中に電力損失が発生した場合、破損は依然として問題になります。