解决 Scrapy-redis内存占用过高问题(不仅仅使用 BloomFilter 优化 scrapy-redis 去重)

Scrapy-Reids 内存占用过高问题

在使用网上盛传的 BloomFilter 降低 Redis 内存使用之后,一开始效果还行,内存使用增长比以前慢一点,但是随着请求数量的增多,虽然 filter 内存占用减少了,但是请求占用的内存随着请求的增多爆炸式增长。

scrapy-redis 内存大致使用在三个方面:

  • scrapy 运行过程中使用的内存
  • redis 数据库中 filter 占用的内存
  • redis 数据库中 请求占用的内存

尽量降低内存使用办法:

  • scrapy 运行过程中使用的内存,在编写爬虫时,注意一下内存泄露。

  • filter 按照网上的教程,将默认的filter 修改成 BloomFilter。

  • 控制 redis 中请求的数量。

    关于请求数量控制问题,网上没有很好的解决办法(也许是我没找到),解决这个问题,只能从源码中下手了。

思路:在 Scrapy 推送请求到 redis 数据库之前,判断redis数据库中请求的数量,如果达到一个峰值,在推送之前或者推送之后,从数据库中拿一个请求出来请求数据。
在源码里摸爬滚打就不唠叨了,直接上教程。


源码分析

scrapy/core/engine.py 文件123 ~ 125 行的 while 循环作用是不停的从队列(redis数据库)里取一个请求出来下载请求。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值