我有一個shell腳本,它調用大約20個python腳本,每個腳本讀取至少500MB大小的文件。在運行幾個python腳本後,8GB內存中有40MB。我嘗試了下面的命令,它工作並給我留下了5.8 GB的內存空間。釋放linux頁面緩存
echo 1 > /proc/sys/vm/drop_caches
是否有一種編程方式來從python做這件事?或者我如何強制python釋放它佔用的內存?
我有一個shell腳本,它調用大約20個python腳本,每個腳本讀取至少500MB大小的文件。在運行幾個python腳本後,8GB內存中有40MB。我嘗試了下面的命令,它工作並給我留下了5.8 GB的內存空間。釋放linux頁面緩存
echo 1 > /proc/sys/vm/drop_caches
是否有一種編程方式來從python做這件事?或者我如何強制python釋放它佔用的內存?
drop_caches-file是一個特定於linux的東西,而不是Python的東西。 Python已經釋放了內存,它只是沒有從緩存中釋放內存的操作系統。
我不知道有足夠的python把代碼扔在我腦袋裏,但爲什麼不直接用上面的「echo」語句進行系統調用或直接寫入proc文件系統呢? (確保腳本在Linux機器上運行,當然,後)。
編輯:lunaryorn更是直線前進和Python的,但它可以imporved到:
os.system('sync')
open('/proc/sys/vm/drop_caches','w').write("1\n")
你爲什麼不簡單地打開文件並寫入它?
with open('/proc/sys/vm/drop_caches', 'w') as stream
stream.write('1\n')
這些確實是Python的基礎知識。
@lunaryorn和@P2bM的答案是正確的,但存在安全隱患,因爲它們要求您使用root權限運行整個python
腳本。至少,如果你的腳本是一個正在開發中的實驗,並且它是瘋狂的,那麼它可以隨意破壞系統。
另一個副作用是由您的腳本(日誌等)創建的所有文件都將由root創建 - 而不是由您創建。這對於以後的處理不太方便。
它是更安全限制sudo
到只需要:
import os
os.system('sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"')
os.system('sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"')
with open('sample.txt', 'w') as f:
f.write('a')
這將提示您一次輸入根口令(這樣它可以後獨立運行),以及您可以驗證文件sample.txt
由您創建,而不是由根創建。
你爲什麼想這樣做?當Linux需要其他內存的內存時,Linux通常足夠聰明以放棄緩存頁面。除非您能證明您可以通過這種方式提高績效,否則認爲您不需要這樣做會更安全。 – 2011-03-30 08:03:55