写入大量文件后内存不断增长
Memory keeps on growing after writing large number of files
我有一个示例程序如下所示,它打开一个文件并将 100kb 的字符串写入该文件并关闭该文件。
for a in xrange(100000):
file_to = open('.//OutputFiles/Data' + str(a) + '.xml', "w")
file_to.write(100kb_String)
file_to.close()
此代码的问题是,内存不断增长并且不会释放内存到 OS。在上面的代码有 运行 之后,如果我使用 rm 从物理磁盘中删除文件,内存将回到 OS。 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()
有什么更好的处理这种情况的方法吗?
我找到了!基本不是python的问题。正如@Brad 所说,这是缓存问题。我按照这个页面中提到的内容进行操作,内存又回到了OS。
http://www.yourownlinux.com/2013/10/how-to-free-up-release-unused-cached-memory-in-linux.html
我有一个示例程序如下所示,它打开一个文件并将 100kb 的字符串写入该文件并关闭该文件。
for a in xrange(100000):
file_to = open('.//OutputFiles/Data' + str(a) + '.xml', "w")
file_to.write(100kb_String)
file_to.close()
此代码的问题是,内存不断增长并且不会释放内存到 OS。在上面的代码有 运行 之后,如果我使用 rm 从物理磁盘中删除文件,内存将回到 OS。 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()
有什么更好的处理这种情况的方法吗?
我找到了!基本不是python的问题。正如@Brad 所说,这是缓存问题。我按照这个页面中提到的内容进行操作,内存又回到了OS。
http://www.yourownlinux.com/2013/10/how-to-free-up-release-unused-cached-memory-in-linux.html