1. 程式人生 > 程式設計 >利用Python如何實時檢測自身記憶體佔用

利用Python如何實時檢測自身記憶體佔用

前言

最近在做文字統計,用 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如何實時檢測自身記憶體佔用的文章就介紹到這了,更多相關Python實時檢測自身記憶體佔用內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!