實際案例
將檔案內容寫入到硬體裝置時,使用系統呼叫,這類i/o操作的時間很長。為了減少i/o操作的次數,檔案通常使用緩衝區,當有足夠多的資料時才進行系統呼叫。檔案的緩衝行為,分為全緩衝、行緩衝和無緩衝。
那麼如何設定python中檔案物件的緩衝行為?
解決方案:
- 全緩衝:open函式的buffering設定為大於1的整數n,n為緩衝區大小
- 行緩衝:open函式的buffering設定為1
- 無緩衝:open函式的buffering設定為0
全緩衝**如下:
# -*- coding: utf-8 -*-
# 全緩衝
f = open('demo_1.txt', 'w', buffering=1024)
f.write('abc')
注:此處不能呼叫close(),因為一旦呼叫該方法,我們不能對檔案進行讀寫操作,進而緩衝區中的資料會在檔案讀寫許可權關閉之前將資料寫入檔案,致使我們設定檔案的緩衝的目的失敗。
執行上述**,我們開啟demo_1.txt檔案檢視是否寫入資料。不出意外,我們開啟該檔案是看不到「abc」的這三個字母的。為了驗證我們的緩衝區是否設定成功,我們在上述**的基礎上新增如下**:
f.write("*" * 1021)
我們再執行一下,開啟demo_1.txt檔案發現仍舊是空檔案。我們再來看看**,現在我們使用了1024b,這時我們只要再寫入乙個字元,之前緩衝區中的資料就會寫入檔案。不妨嘗試一下,我們繼續新增如下**:
f.write("+")
執行程式並開啟demo_1.txt檔案,我們發現其內容如下:
abc*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
******
這時,我們可以發現在檔案內容中並沒有我們最後新增的「+」。因此,我們可以斷定當我們輸入的資料大於緩衝區n的大小時,python會將緩衝區n大小的資料寫入檔案中,為後面我們輸入的資料騰出空間進行快取。
行緩衝**如下:
# 行緩衝
f = open('demo_2.txt', 'w', buffering=1)
f.write("abcd")
f.write("123456")
執行上述**並開啟demo_2.txt檔案發現該檔案為空檔案。既然是行緩衝,我們猜想是不是要換行才會將緩衝區的資料寫入檔案。因此,我們新增如下**:
f.write("\n")
這時,我們開啟demo_2.txt檔案就可以看到我們輸入的資料了。
無緩衝**如下:
# 無緩衝
f = open('demo_3.txt', 'w', buffering=0)
f.write('abc')
執行程式並開啟demo_3.txt檔案發現資料已經寫入到檔案中。 open函式 檔案設定緩衝
注釋 將檔案寫入硬體裝置時,使用系統呼叫,這類i o操作一般時間很長 為了減少i o次數操作,檔案通常使用緩衝區 有足夠的資料才進行系統呼叫 檔案緩衝行為分為 全緩衝 open函式的buffering設定為大於1的整數n,n為緩衝區大小 行緩衝 open函式的buffering設定為1,只要遇到 n...
Python 設定檔案緩衝型別
案例 將檔案內容寫入到硬體裝置時候,使用系統呼叫,這類io操作時間長,為了減小io操作,通常會使用緩衝區 有足夠多資料才能呼叫 檔案緩衝行為分為 全緩衝,行緩衝,無緩衝 如何解決?open buffering a buffering設定緩衝行為 全緩衝 a 是正整數,當緩衝區檔案大小達到a大小時候,...
mysql 緩衝設定
set session query cache type on set global query cache size 102760448 set global query cache limit 2097152 show variables like query cache show status...