zoukankan      html  css  js  c++  java
  • scrapy 源码解析 (四):启动流程源码分析(四) Scheduler调度器

    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

  • 相关阅读:
    微服务 面试
    SpringMVC工作原理
    win7系统不能用telnet命令的两种解决方法
    Java NIO框架Netty教程(一) – Hello Netty
    基于JT/T808协议的车辆监控平台架构方案
    分布式高并发物联网(车联网-JT808协议)平台架构方案
    Linux CGroup
    Linux top、VIRT、RES、SHR、SWAP(S)、DATA Memory Parameters Detailed
    UEFI BIOS Rootkit Analysis
    Kademlia、DHT、KRPC、BitTorrent 协议、DHT Sniffer
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12932254.html
Copyright © 2011-2022 走看看