首先更大家说下  正式部署上线的爬虫会有分布式爬虫的需求  而且原本scrapy 的seen (判断重复url的池  不知道用啥词  已抓url吧 )  保存在磁盘

url 队列 也是保存在磁盘 (保存在磁盘 对爬虫效率会极大影响)   如果是断点重爬 声明 jobdir 百分百是保存在磁盘   不申明jobdir 的话保存在内存 但会有单点内存的上限问题   所以说那么多 总之  scrapy_redis  是爬虫工程师必须了解的

scrapy_redis/dupefilter.py

判断已抓取url  主要是声明 dupefilter_key  作为 redis key  判断是否已抓取  第 100行  added = self.server.sadd(self.key, fp)  return added == 0   通过插入返回值 判断已抓取url

scrapy_redis/defaults.py

默认配置文件

scrapy_redis/queue.py

队列文件  默认PriorityQueue  用到 redis 有序集合 self.server.execute_command('ZADD', self.key, score, data)  留意 100行 score = -request.priority

redis 有序集合是越小 排序越优先 加了-  等于说是反过来   还用到redis的事务  112行 pipe = self.server.pipeline()

先入后出队列是通过  lpush  lpop  实现

先进先出 lpush rpop 实现

scrapy_redis/pipelines.py

63 行   把  item  push 到redis    61行   return deferToThread(self._process_item, item, spider)   返回非阻塞 异步函数

scrapy_redis/scheduler.py

引擎文件  主要是处理队列的  push pop      154行 判断去重   164  加入超时 用作 阻塞 pop  如果有多条进程 读取  队列 必须用到阻塞保证一致性

有不懂大家尽管问

ken桑带你读源码 之 scrapy_redis的更多相关文章

  1. ken桑带你读源码 之scrapy

    开篇声明 文章讲解源码不一定从入口开始   主题更注重 思路讲解以及核心函数   ok?  废话到此为止 /scrapy/downloadermiddlewares/  文件夹下是下载器的 中间件  ...

  2. ken桑带你读源码 之scrapy scrapy\core\scheduler.py

    从英文来看是调度程序  我们看看是怎么调度 首先爬虫队列有两个 一个是保存在内存中  没有历史记录   重新开始  42行  self.mqs = self.pqclass(self._newmq) ...

  3. ken桑带你读源码 之scrapy scrapy\extensions

    logstats.py 爬虫启动时 打印抓取网页数   item数 memdebug.py 爬虫结束 统计还被引用的内存 也就是说gc 回收不了的内存   memusage.py 监控爬虫 内存占用  ...

  4. ken桑带你读源码之scrapy downloadermiddlewares

    downloadermiddlewares  文件夹是下载中间件 其中  process_request   还没请求时的处理函数 process_response  请求之后的处理函数 chunke ...

  5. ken桑带你读源码 之scrapy pipelines\images.py

    大家先看看 http://www.cnblogs.com/attitudeY/p/7078559.html 下面我做一些补充   最新版本1.1 已经支持 下载路径保存到  item   48行    ...

  6. Android AsyncTask完全解析,带你从源码的角度彻底理解

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11711405 我们都知道,Android UI是线程不安全的,如果想要在子线程里进 ...

  7. [一起读源码]走进C#并发队列ConcurrentQueue的内部世界

    决定从这篇文章开始,开一个读源码系列,不限制平台语言或工具,任何自己感兴趣的都会写.前几天碰到一个小问题又读了一遍ConcurrentQueue的源码,那就拿C#中比较常用的并发队列Concurren ...

  8. Java读源码之ReentrantLock

    前言 ReentrantLock 可重入锁,应该是除了 synchronized 关键字外用的最多的线程同步手段了,虽然JVM维护者疯狂优化 synchronized 使其已经拥有了很好的性能.但 R ...

  9. 带货直播源码开发采用MySQL有什么优越性

    MySQL是世界上最流行的开源关系数据库,带货直播源码使用MySQL,可实现分钟级别的数据库部署和弹性扩展,不仅经济实惠,而且稳定可靠,易于运维.云数据库 MySQL 提供备份恢复.监控.容灾.快速扩 ...

随机推荐

  1. METS介绍

    METS介绍 首页  >  关于METS > METS介绍   医护英语水平考试(Medical English Test System, 以下简称:METS)是由教育部考试中心与中国国际 ...

  2. 谈谈javaSE中的==和equals的联系与区别

    前言 ==和equals是我们面试中经常会碰到的问题.那么它们之间有什么联系和区别呢?今天我们就来聊聊吧! 问题 这里先抛出一些比较典型笔试问题: int x = 10; int y = 10; St ...

  3. JAVA设计模式 4【创建型】理解建造者模式

    Hello,又是拖了几天更,实在是忙的要死,有时候忙累了,真的就是倒头睡的那种,刚好今天闲下来了.今天来更新一篇建造者模式. 其实建造者模式,我们已经在上一节已经有了解过了.只不过是上一节没有提到这样 ...

  4. Java项目开启远程调试(tomcat、springboot)

    当我们运行一个项目的时候,一般都是在本地进行debug.但是如果是一个分布式的微服务,这时候我们选择远程debug是我们开发的利器. 环境apache-tomcat-8.5.16 Linux 如何启用 ...

  5. Layui的省市区三级联动

    PHP: /** * 通过接口获取省市区 * @param string $name * @return json */ public function getDataTree($name = '') ...

  6. HTML5(五)Geolocation

    HTML5 Geolocation 定位用户的位置 HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的. 注意 ...

  7. 洛谷 P1220 关路灯 区间DP

    题目描述 某一村庄在一条路线上安装了 n 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了 ...

  8. 一口气说出 OAuth2.0 的四种鉴权方式,面试官会高看一眼

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 上周我的自研开源项目开始破土动工了,<开源项目迈出第一步,10 选 1?页面模板成了第一个绊脚石 > , ...

  9. Django---进阶9

    目录 自定义分页器的拷贝及使用 Forms组件 前戏 基本使用 校验数据 渲染标签 展示提示信息 钩子函数(HOOK) forms组件其他参数及补充知识点 作业 自定义分页器的拷贝及使用 " ...

  10. mysql常用时间函数与类型转换

    一.用到的函数有: 1.时间格式化函数  DATE_FORMAT(date,format) 2.时间加减函数DATE_ADD(date,INTERVAL expr unit)DATE_SUB(date ...