用Python Mechanize做爬虫遇到的内存过高问题

今天在用mechanize写了一个爬虫脚本,想要去某网站爬取大概30万张图片。

 

整个过程是:

1、获取目标页面地址

2、取得目标地址前几页的所有图片url

3、对这些url进行下载,并把索引数据保存到mysql数据库。

 

 

这个脚本大概每秒钟完成一张图片的下载(主要是网络只有200K/S左右,是瓶颈)

 

 

当图片下载到大约15000张左右的时候,发现越来越慢,最后干脆停下了。

 

用ps aux查看,发现进程sleep了,感觉很奇怪。

free看一下,内存竟然只剩下100M了(系统总内存4GB)

 

在网上瞎逛了一下,发现原来mechanize默认会保存模拟过的操作历史,导致占用的内存越来越大:

http://stackoverflow.com/questions/2393299/how-do-i-disable-history-in-python-mechanize-module

 

 

为了方便,大约翻译一下:

 

mechanize初始化Browser()的时候,如果你不给他传一个history对象作为参数,Browser()就会按照默认的方式(允许保存操作历史)来进行初始化,你可以随便传个什么history给它即可,如自定义一个NoHistory对象:

 

class NoHistory(object):
  def add(self, *a, **k): pass
  def clear(self): pass

b = mechanize.Browser(history=NoHistory())
 

 

问题不大,记录一下以供后来者参考。

你可能感兴趣的:(python,mechanize,内存过高,进程挂起)