ファイルに書き込むためのPythonのCOMMITアナログはありますか?
質問
書き込み用に開いたファイルと、数日間実行されているプロセスがあります。比較的ランダムな瞬間に何かがファイルに書き込まれます。私の理解では、file.close()を実行するまで、ディスクに実際に何も保存されない可能性があります。本当ですか?
メインプロセスがまだ終了していないときにシステムがクラッシュした場合はどうなりますか?毎回、ある種のコミットを行う方法はありますか?たとえば、10分(そして、このコミットを自分で呼び出す-タイマーを実行する必要はありません)? file.close()とopen(file、 'a')が唯一の方法ですか、それともより良い代替手段がありますか?
解決
これを行うには、 file.flush()
を使用できる必要があります。
他のヒント
f.flush()
を追加するために現在のプロセスを強制終了したくない場合(既に何日も実行されているように聞こえますか?)、大丈夫です。書き込み中のファイルが大きくなっても、そのデータは失われません...
Pythonドキュメントから:
write(str) ファイルに文字列を書き込みます。戻り値はありません。バッファリングのため、 文字列が実際に表示されない場合があります flush()またはclose()までのファイル メソッドが呼び出されます。
Pythonのバッファリングシステムは自動的にファイルオブジェクトをフラッシュするように聞こえますが、それが発生した場合は保証されません。
データがディスクに書き込まれていることを確認するには、 file.flush()
に続いて os.fsync(file.fileno())
を使用します。
すでに述べたように、.flush()メソッドを使用してバッファから書き込みを強制しますが、実際には書き込みが遅くなる可能性があるため、フラッシュするために多くの呼び出しを使用しないでください(アプリケーションが高速書き込みに依存している場合)バッファサイズよりも小さな変更を書き込むようファイルシステムに強制することになるため、ひざまずきます。 :)