具有数千个类顺序实例化的资源管理



给定一个包含几千个URL的电子表格,我将遍历它们,并为每个URL实例化一个Page()类,然后调用两个方法,第一个获取页面,第二个使用lxml解析。(根据我的经验,urllib2&lxml很快就完成了他们的东西,这就是为什么我认为我不需要使用多线程,反正我没有经验):

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 对象上调用 del
  • 雇用上下文管理器 ( with Page(url) as page:
  • 最小化资源使用的任何其他技术

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

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

如果您不保存网址,也不保存页面内容,则 Python GC 将根据需要回收内容。

如果您引用page对象中的内容,并且还引用了其他数据结构中的内容,则世界上所有del调用都无济于事,因为内容将比通过释放 URL 获得的任何少量内存大得多。

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

从您所揭示的内容来看,一次又一次地重用一个 Page 对象就足够了,因为您提到过,您希望按顺序遍历所有页面。

相关内容

  • 没有找到相关文章