如何释放python程序内存随时间的累积,文件I / O.

时间:2014-04-19 14:44:15

标签: python

我有一个下载和保存html页面的功能。随着时间的推移,内存不会被释放,程序会变慢。我怎样才能强制释放这个记忆(或占用这个记忆的东西?

我认为问题可能在于阅读,编写文件。虽然我调用close(),但还有其他问题吗?

以下代码位于for循环中(这已完成1000次以上)

openFile = None

try:
    #download the page
    pageText = getPageAsText(url)

    #write file to disk
    fileName = name
    openFile = open(os.path.expanduser('~')+STATIC_DIRECTORY+'/'+name, 'w')
    openFile.write(pageText)

except Exception:
    traceback.print_exc()

finally:
    if openFile is not None:
        openFile.close()

3 个答案:

答案 0 :(得分:2)

您可以del取消引用未使用的变量。它提示垃圾收集器更早收集内存。没有您的整个代码,我们无法看到内存泄漏发生的位置。

我还会使用with重写您的代码,因此它会自行处理。

 pageText = getPageAsText(url)
 with open(os.path.expanduser('~')+STATIC_DIRECTORY+'/'+name, 'w') as f:
      f.write(pageText)

答案 1 :(得分:0)

您可以手动拨打gc gc。 但是您的数据未发布,因此无法正常运行。

在循环结束时添加代码

pageText = None
fileName = None
openFile = None

Python gc将自动运行。

答案 2 :(得分:0)

我感觉问题可能在其他地方,但强制垃圾收集:

import gc
gc.collect()    # force garbage collection