我有一個文件可以寫入,一個進程運行幾天 - 在相對隨機的時刻寫入文件。我的理解是 - 直到我做file.close() - 有一個機會沒有真正保存到磁盤。真的嗎?有沒有COMMIT模擬python寫入文件?
如果主進程還沒有完成時系統崩潰怎麼辦?有沒有一種方法可以每隔一段時間做一次提交 - 10分鐘(我自己稱這個提交 - 不需要運行計時器)?是file.close()和打開(文件,'a')唯一的方式,還是有更好的選擇?
我有一個文件可以寫入,一個進程運行幾天 - 在相對隨機的時刻寫入文件。我的理解是 - 直到我做file.close() - 有一個機會沒有真正保存到磁盤。真的嗎?有沒有COMMIT模擬python寫入文件?
如果主進程還沒有完成時系統崩潰怎麼辦?有沒有一種方法可以每隔一段時間做一次提交 - 10分鐘(我自己稱這個提交 - 不需要運行計時器)?是file.close()和打開(文件,'a')唯一的方式,還是有更好的選擇?
你應該可以使用file.flush()
來做到這一點。
如果您不想殺死當前進程以添加f.flush()
(這聽起來好像已經運行了幾天了),您應該沒問題。如果你看到你寫越來越大的文件,也不會丟失數據......
從Python文檔:
寫(STR) 一個字符串寫入該文件。沒有返回值。由於緩衝, 該字符串實際上可能不會顯示在 文件中,直到flush()或close() 方法被調用。
這聽起來像Python的緩衝系統會自動刷新文件對象,但不能保證這種情況發生時。
要確保您的數據已寫入磁盤,請使用file.flush()
,然後使用os.fsync(file.fileno())
。
如前所述,使用.flush()方法強制寫出緩衝區,但避免使用大量調用來刷新,因爲這實際上會減慢寫入速度(如果應用程序依賴於快速寫入),因爲你會迫使你的文件系統寫入小於它的緩衝區大小的變化,這會使你跪下。 :)