歡迎您光臨本站 註冊首頁

利用Python如何實時檢測自身內存佔用

←手機掃碼閱讀     月球人 @ 2020-05-10 , reply:0

前言
最近在做文本統計,用 Python 實現,遇到了一個比較有意思的難題――如何保存統計結果。
直接寫入內存實在是放不下,十幾個小時後內存耗盡,程序被迫關閉。如果直接寫入數據庫吧,每次寫入又太慢了,本來就十幾個小時了,這樣下去就要往星期上數了,也不是個辦法。
解決方案
最後,我想到了一個兩者兼顧的方案――用內存做緩衝,達到一定量之後一次性將當前所有數據合併到硬盤裡。
但這樣就有一個閾值,如何確定同步硬盤的時機,通常可以按照文件粒度進行處理,比如處理一個語料文件同步一次……但我的語料有大有小,大的有10GB,根本等不到那一刻內存就爆炸了,後來我想用統計數據量進行判斷……可這又有點難以估計,小了吧頻繁寫入,緩存的意義就不大了,大了吧還沒等到條目數量達到,內存就已經爆滿。另外考慮到將來程序會運行在不同配置的設備上,讓其他開發者根據自身情況計算這個閾值也有點太不友好,於是我想到了一個辦法――不如讓 Python 自己檢測自己的內存佔用,如果快滿了(或者達到閾值),就同步寫入硬盤一次。
對於其他開發者來說,自身設備的內存多大是很容易查看的,根據系統運行狀況設置一個合理的閾值,相當方便。
要用 Python 監控自身內存佔用,要使用 psutil 這個庫來和系統進行交互,基本邏輯就是先拿到自己的 pid ,然後根據這個 pid 去跟系統獲取進程信息。
def get_current_memory_gb() -> int: # 獲取當前進程內存佔用。 pid = os.getpid() p = psutil.Process(pid) info = p.memory_full_info() return info.uss / 1024. / 1024. / 1024.
比如我係統是 32GB 內存,那麼我設置個 20GB 就相當安全,用 Python 進行統計語料,數據多到進程佔用 20GB 內存了,就把當前的數據寫入硬盤,同步統計數據,然後清空程序裡的字典緩存釋放內存。
python之psutil
psutil是個跨平臺庫,能夠輕鬆實現獲取系統運行的進程和系統利用率,包括CPU、內存、磁盤、網絡等信息。
Linux系統下的安裝
pip install psutil


[月球人 ] 利用Python如何實時檢測自身內存佔用已經有274次圍觀

http://coctec.com/docs/python/shhow-post-233587.html