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()
有沒有辦法更好地處理這種情況?
我試圖複製,並且在內存中看不到任何增長。也許你的系統有一個RAM磁盤或者磁盤緩存方案,當你寫文件的時候,它們會佔用內存。 –
也許你可以嘗試看看這篇文章中的想法:http://chase-seibert.github.io/blog/2013/08/03/diagnosing-memory-leaks-python.html有兩個有用的庫在兩個Python stdlibs和pip,可以監視Python的對象和內存使用情況。我不確定這個問題會出現什麼問題,因爲你似乎只是循環着兩個變量'a'和'file_to',Python的GC收集器應該自動清理孤兒對象。 – Shashank
@BradBudlong,我可以知道您正在運行的操作系統和python版本嗎?我正在使用2.7.9 python版本運行在Amazon EC2 linux AMI上。 – Pavan