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

2022-10-04 14:27:21 字數 1107 閱讀 3923

前言

最近在做文字統計,用 python 實現,遇到了乙個比較有意思的難題——如何儲存統計結果。

直接寫入記憶體實在是放不下,十幾個小時後記憶體耗盡,程式被迫關閉。如果直接寫入資料庫吧,每次寫入又太慢了,本來就十幾個小時了,這樣下去就要往星期上數了,也不是個辦法。

解決方案

最後,我想到了乙個兩者兼顧的方案——用記憶體做緩衝,達到一定量之後一次性將當前所有資料合併到硬碟裡。

但這樣就有乙個閾值,如何確定同步硬碟的時機,通常可以按照檔案粒度進行處理,比如處理乙個語料檔案同步一次……但我的語料有大有小,大的有10gb,根本等不到那一刻記憶體就**了,後來我想用統計資料量進行判斷……可這又有點難以估計,小了吧頻繁寫入,快取的意義就不大了,大了吧還沒等到條目數量達到,記憶體就已經爆滿。另外考慮到將來程式會執行在不同配置的裝置上,讓其他開發者根據自身情況計算這個閾值也有點太不友好,於是我想到了乙個辦法——不如讓 python 自己檢測自己的記憶體占用,如果快滿了(或者達到閾值),就同步寫入硬碟一次。

對於其他開發者來說,自身裝置的記憶體多大是很容易檢視的,根據系統執行狀況設定乙個合理的www.cppcns.com閾值,相當方便。

要用 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

總結

心得 如何快速利用SqlMap做安全檢測

sqlmap的介紹我就不詳提啦!sqlmap是用來尋找與做sql injection的一款工具 在使用前你需要安裝python唷!安裝的過程我們就不介紹了。直接來看如何快速使用sqlmap吧!這裡我會用到以下的工具 fiddler 方便我們擷取http get 或是 post 內容 我的環境是win...

python檢測按鍵按下 如何檢測按鍵是否被按下?

對於python,作為乙個新手,我嘗試著用一本指南來編寫我自己的遊戲。不過,在這個遊戲中,我試著檢測什麼時候乙個鍵一直被按住而不是僅僅按下。我使用的當前 不會使字元移動,而且如果沒有實現halt self,evt 會導致飛船在按住按鈕足夠長時間後無法控制地加速。在from tkinter impor...

python中,如何實時獲取PING命令的結果

ping命令在ping通或者不通的時候,大概是下面兩個情況 技術棧使用了 flask框架和redis 儲存ping資料的redis 1號庫 redis sh strictredis host 127.0.0.1 port 6379 decode responses true db 1 defflus...