Python破坏内容以节省内存

时间:2014-11-18 13:27:27

标签: python

我有一个课程来获取网页的HTML并用它做一些事情

import requests

class A(object):
    def __init__(self, url):
        self.r = requests.get(url)
        self.html = self.r.text
        #other things

class B(A):
    def __init__(self,url):
        super(B,self).__init__(url)
        #other things

我将实例化这个类数十万次,就像这样

for url in many_urls:
    page = B(url)
    #other things

如何确保删除page.html等内容以及其他属性并将其保留在内存中以减慢其速度?

2 个答案:

答案 0 :(得分:3)

只要引用它的对象存在,html就会保存在内存中。

如果您的for循环未将B对象分配给任何其他变量,则每次重新分配page时,之前创建的B对象都将符合条件垃圾收集,html将同时从内存中删除。

如果您保留对每个B对象的引用,您将慢慢填满您的记忆,但如果您允许它们被垃圾收集,那么您应该没问题。

答案 1 :(得分:1)

您可以使用del pagepage = None,这两个语句都会发布垃圾回收内容。如果您的for循环内核对内存至关重要,或者您正在使用带有自己内存管理的对象(如numpy.ndarray),这是有道理的。

还要注意变量" bleed"超出for循环的范围。这意味着最后一次迭代的page将一直存在,直到当前范围终止(通常在函数/方法结束时)。