2015-04-18 126 views
2

我有一個下面顯示的示例程序,它打開一個文件並將100kb的字符串寫入文件並關閉文件。寫入大量文件後內存不斷增長

for a in xrange(100000): 
    file_to = open('.//OutputFiles/Data' + str(a) + '.xml', "w") 
    file_to.write(100kb_String) 
    file_to.close() 

此代碼的問題是,內存不斷增長,並不釋放內存到操作系統。上面的代碼運行後,如果使用rm從物理磁盤中刪除文件,內存將返回到操作系統。 gc.collect()不起作用。我嘗試瞭如下的子流程,但仍然沒有運氣。

def worker(a): 
    file_to = open('.//OutputFiles/Data' + str(a) + '.xml', "w") 
    file_to.write(100kb_string) 
    file_to.close() 

if __name__ == '__main__': 
    jobs = [] 
    for i in range(100000): 
     p = multiprocessing.Process(target=worker, args=(i,)) 
     jobs.append(p) 
     p.start() 
     p.join() 

有沒有辦法更好地處理這種情況?

+0

我試圖複製,並且在內存中看不到任何增長。也許你的系統有一個RAM磁盤或者磁盤緩存方案,當你寫文件的時候,它們會佔用內存。 –

+0

也許你可以嘗試看看這篇文章中的想法:http://chase-seibert.github.io/blog/2013/08/03/diagnosing-memory-leaks-python.html有兩個有用的庫在兩個Python stdlibs和pip,可以監視Python的對象和內存使用情況。我不確定這個問題會出現什麼問題,因爲你似乎只是循環着兩個變量'a'和'file_to',Python的GC收集器應該自動清理孤兒對象。 – Shashank

+0

@BradBudlong,我可以知道您正在運行的操作系統和python版本嗎?我正在使用2.7.9 python版本運行在Amazon EC2 linux AMI上。 – Pavan

回答

相關問題