0
我正在用Python編寫一個程序,它從「/ proc/PID/status」文件中捕獲我的子進程的高峯內存使用情況。我可以成功獲取這些信息,但這只是進程開始時的初始內存使用情況,並不是峯值內存使用情況。這裏是我的代碼:Python-通過文件重新循環以獲取更新的信息
def worker(self):
cmd = ["/home/orlando/CountMem","400000000","2000"]
p = subprocess.Popen(cmd,stdout=subprocess.PIPE)
id_list = []
id_list.append(p.pid)
for num in id_list:
stat_file = open("/proc/{0}/status".format(num))
for i, line in enumerate(stat_file):
if i == 3:
print line
if i == 10:
print line
return id_list
if __name__ == '__main__':
count = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes = count)
print(pool.map(worker,['ls']*count))
這裏是輸出我從這個代碼獲得:
Pid: 7839
Pid: 7838
VmPeak: 12 kB
VmPeak: 12 kB
Pid: 7841
VmPeak: 2400 kB
Pid: 7840
VmPeak: 2400 kB
Pid: 7843
VmPeak: 12 kB
Pid: 7842
VmPeak: 12 kB
Pid: 7844
VmPeak: 12 kB
Pid: 7845
VmPeak: 2400 kB
希望以使其更清晰一點,我想閱讀「的/ proc/PID /狀態「文件多次,直到過程結束,以便我可以獲得峯值內存使用量,而不是初始內存使用量。任何有識之士將不勝感激,謝謝。
我不知道我理解。如果它的值高於以前看過的任何一個值,那麼可以將值保存在一個變量中?您可能需要解析該行(split())以獲取該值,並將其轉換爲整數以進行比較。對不起,如果我錯過了什麼。 – Jiminion
告訴我,如果這有幫助。代碼使用pid進入狀態文件,從那裏讀取文件並打印保存PID和VmPeak信息的第3行和第10行。我的問題是,它只在開始時這樣做。我想重複這個讀取文件的過程,只要實際的子進程正在執行,每次讀取文件時都會打印PID和VmPeak。這是否清除了我爲你創造的一些煙霧? –
您只讀取每個文件(每個pid)一次。你需要重複讀一遍又一遍。放一會兒(條件是真的):圍繞一切。所有(?)過程完成後終止。保留峯值記憶值的字典,以pid爲鍵。 – Jiminion