解决 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数据库)里取一个请求出来下载请求。

Original: https://blog.csdn.net/qq_24047235/article/details/118570828
Author: 吟一句君埋泉下泥销骨
Title: 解决 Scrapy-redis内存占用过高问题(不仅仅使用 BloomFilter 优化 scrapy-redis 去重)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/789568/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球