2013-07-22 43 views
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 /狀態「文件多次,直到過程結束,以便我可以獲得峯值內存使用量,而不是初始內存使用量。任何有識之士將不勝感激,謝謝。

+0

我不知道我理解。如果它的值高於以前看過的任何一個值,那麼可以將值保存在一個變量中?您可能需要解析該行(split())以獲取該值,並將其轉換爲整數以進行比較。對不起,如果我錯過了什麼。 – Jiminion

+0

告訴我,如果這有幫助。代碼使用pid進入狀態文件,從那裏讀取文件並打印保存PID和VmPeak信息的第3行和第10行。我的問題是,它只在開始時這樣做。我想重複這個讀取文件的過程,只要實際的子進程正在執行,每次讀取文件時都會打印PI​​D和VmPeak。這是否清除了我爲你創造的一些煙霧? –

+0

您只讀取每個文件(每個pid)一次。你需要重複讀一遍又一遍。放一會兒(條件是真的):圍繞一切。所有(?)過程完成後終止。保留峯值記憶值的字典,以pid爲鍵。 – Jiminion

回答

0

圍繞for循環檢查pid放置一個while循環。每個循環後,檢查每個進程是否仍在運行。如果沒有,請將其從您的id_list()中移除。所以條件會是while(len(id_list)> 0):