Scheduler调度器

对ExecutionEngine执行引擎篇出现的Scheduler进行展开。Scheduler用于控制Request对象的存储和获取,并提供了过滤重复Request的功能。

Scheduler对象

scheduler对象是通过类的from_cralwer方法生成的。
scrapy/core/scheduler.py#Scheduler:

from_crawler(cls, crawler):
settings = crawler.settings
dupefilter_cls = load_object(settings['DUPEFILTER_CLASS'])
dupefilter = dupefilter_cls.from_settings(settings)
pqclass = load_object(settings['SCHEDULER_PRIORITY_QUEUE'])
dqclass = load_object(settings['SCHEDULER_DISK_QUEUE'])
mqclass = load_object(settings['SCHEDULER_MEMORY_QUEUE'])
logunser = settings.getbool('LOG_UNSERIALIZABLE_REQUESTS', settings.getbool('SCHEDULER_DEBUG'))
return cls(dupefilter, jobdir=job_dir(settings), logunser=logunser,
stats=crawler.stats, pqclass=pqclass, dqclass=dqclass, mqclass=mqclass)

创建了4个对象,分别是dupefilter,pqclass,dqclass,mqclass。

dupefilter过滤器(url去重)

DUPEFILTER_CLASS = ‘scrapy.dupefilters.RFPDupeFilter’
这个类的含义是"Request Fingerprint duplicates filter",请求指纹副本过滤。也就是对每个request请求做一个指纹,保证相同的请求有相同的指纹。对重复的请求进行过滤。
包含查询字符串、cookies字段的相同url也会被去重。

pqclass优先级队列

SCHEDULER_PRIORITY_QUEUE = ‘queuelib.PriorityQueue’
这是一个优先级队列,使用的是开源的第三方queuelib.它的作用就是对request请求按优先级进行排序,这样我们可以对不同重要性的URL指定优先级(通过设置Request的priority属性)。
优先级是一个整数,虽然queuelib使用小的数做为高优化级,但是由于scheduler入队列时取了负值,所以对于我们来说,数值越大优先级越高。

dqclass支持序列化的后进先出的磁盘队列

SCHEDULER_DISK_QUEUE = ‘scrapy.squeues.PickleLifoDiskQueue’
这是一个支持序列化的后进先出的磁盘队列。主要用来帮助我们在停止爬虫后可以接着上一次继续开始爬虫。

mqclass后进先出的内存队列

SCHEDULER_MEMORY_QUEUE = ‘scrapy.squeues.LifoMemoryQueue’
从名字上看,是后进先出的内存队列。这个队列是为了使用2中的队列而存在的,不必单独分析。
————————————————
版权声明:本文为CSDN博主「csdn_yym」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/csdn_yym/java/article/details/85576173

最新文章

  1. 升级Windows10后Apache服务器启动失败的解决方法
  2. fnd_profile.value('AFLOG_ENABLED')的取值 和配置文件相关SQL
  3. jsp基础知识(基本的语法及原理)
  4. 【PSR规范专题(3)】PSR-2 代码风格规范
  5. BFC--绝对值得你思考
  6. java tools: jstat
  7. (转载)mysql 存在该记录则更新,不存在则插入记录的sql
  8. wampServer 修改mySql 的root用户密码
  9. js中的3种弹出式消息提醒(警告窗口,确认窗口,信息输入窗口)的命令式
  10. Managing Spark data handles in R
  11. 通过业务系统的重构实践DDD
  12. [Spark内核] 第34课:Stage划分和Task最佳位置算法源码彻底解密
  13. CLR 简介
  14. linux的 压缩与解压 命令集
  15. ADO.NET之Parameter属性
  16. C++:如何正确的定义一个接口类
  17. unity下3d模型的透明处理
  18. QString和char*互转
  19. java中String的equals()和 ==
  20. js基础知识整理

热门文章

  1. Linux系统管理——Linux简介
  2. 分享一个我自己做的 Excel 万年历
  3. c常用函数-strcat 和 strncat
  4. 其他函数-web_concurrent
  5. LR字符串处理函数-lr_save_string
  6. Android学习笔记Tab代替ActionBar做的顶部导航
  7. Spring IOC原理补充(循环依赖、Bean作用域等)
  8. java中的excel操作
  9. 原来你是这样的BERT,i了i了! —— 超详细BERT介绍(一)BERT主模型的结构及其组件
  10. 手把手教你学Numpy,搞定数据处理——收官篇