flush() 方法強制將作業系統使用者空間緩衝區的資料寫入磁碟(或底層裝置)。類似 C 語言的 fflush()。Python 在檔案關閉時自動呼叫 flush(),但在關鍵資料寫入後、檔案關閉前主動呼叫可確保資料持久化,避免系統崩潰導致資料遺失。
語法
fileObject.flush()
基本範例
f = open('foo.txt', 'w')
f.write('Critical data')
f.flush() # 確保立即寫入磁碟
# 繼續其他操作...
f.close()
緩衝機制說明
- 塊緩衝:預設模式,累積一定量(通常 4KB/8KB)才寫入。
- 行緩衝:文字模式下遇換行符
\n 自動 flush(終端機輸出常見)。
- 無緩衝:
open(..., buffering=0)(僅二進位模式),每次 write 直接系統呼叫。
何時需要手動 flush()
| 場景 | 原因 |
| 日誌檔案 | 即時查看最新日誌,避免緩衝延遲 |
| 進程間通訊 (管道/FIFO) | 讀取端需立即收到資料 |
| 關鍵狀態持久化 | 掉電/崩潰前保證資料已落盤 |
| 長時間運行程式定期檢查點 | 定期同步進度檔案 |
注意事項
flush() 僅刷新使用者空間緩衝區至 OS 核心緩衝區,不保證資料已物理寫入磁碟盤面。需 os.fsync(f.fileno()) 強制核心刷新至裝置。
- 唯讀模式開啟的檔案呼叫
flush() 無效果(no-op)。
- 頻繁呼叫
flush() 會嚴重降低 I/O 效能,僅在必要時使用。
進階:fsync 確保物理落盤
import os
f = open('critical.dat', 'wb')
f.write(b'important')
f.flush()
os.fsync(f.fileno()) # 阻塞直到資料寫入磁碟物理介質
f.close()
總結
flush() 是「推送緩衝區到 OS」的輕量操作,配合 os.fsync() 可達到「資料確實寫入磁碟」的強一致性。日常開發中,使用 with 區塊自動處理關閉與 flush 即可;僅在日誌、IPC、關鍵狀態持久化等場景需手動介入。
- 上一篇文章: Python 檔案操作:close() 方法關閉檔案完整教學
- 下一篇文章: Python 檔案操作:fileno() 方法取得檔案描述符完整教學
Copyright ©
程式碼之家 All Rights Reserved