我有一个课程来获取网页的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
等内容以及其他属性并将其保留在内存中以减慢其速度?
答案 0 :(得分:3)
只要引用它的对象存在,html就会保存在内存中。
如果您的for
循环未将B
对象分配给任何其他变量,则每次重新分配page
时,之前创建的B
对象都将符合条件垃圾收集,html将同时从内存中删除。
如果您保留对每个B
对象的引用,您将慢慢填满您的记忆,但如果您允许它们被垃圾收集,那么您应该没问题。
答案 1 :(得分:1)
您可以使用del page
或page = None
,这两个语句都会发布垃圾回收内容。如果您的for循环内核对内存至关重要,或者您正在使用带有自己内存管理的对象(如numpy.ndarray),这是有道理的。
还要注意变量" bleed"超出for循环的范围。这意味着最后一次迭代的page
将一直存在,直到当前范围终止(通常在函数/方法结束时)。