class 的数千个顺序实例化的资源管理

Resource management with thousands of sequential instantiations of a class

给定一个包含几千个 URL 的电子表格,我将遍历它们并为每个实例化一个 Page() class 然后调用两个方法,第一个获取页面,第二个获取页面用 lxml 解析。 (urllib2lxml 根据我的经验,他们的工作做起来非常快,这就是为什么我认为我不需要使用多线程,反正我没有经验):

class Page(object):
    """Representation of any page to be scraped"""

    def __init__(self, url):
        self.url = url


    def fetch(self):
        """ Fetch the URL. Return raw (text) source."""

        self.source = # do urllib stuff

    def parse(self):
        """ Extract page elements with lxml """

我对 Python 中的内存管理知之甚少。是否有必要或谨慎地执行以下任何操作?

根据您所透露的内容,一次又一次地重复使用一个 Page 对象就足够了,因为您提到过,您想按顺序遍历所有页面。

@ferdy 的回答基本正确。但一般来说,只有在使用大量内存时才需要管理内存。

据我了解,您将实例化一个页面,获取内容,对其调用 page.parse(),然后……什么?

如果您不持有 url,也不持有页面内容,那么 Python GC 将根据需要回收内容。

如果你正在引用 page 对象中的内容,并且你还引用了一些其他数据结构中的内容,那么世界上所有的 del 调用都不会帮助你,因为内容将比您通过释放 URL 取回的任何一点内存大得多。

简短回答:在它成为问题之前不要担心,然后在 SO 上创建一个新的 post 并描述您最终遇到的实际问题。