scrapy的调度疑问?

新手上路,请多包涵

假设在一个scrapy-redis服务中启动了2个爬虫,CONCURRENT_REQUESTS为默认设置,也就是线程池中有16个线程,那么是每个爬虫有16个线程还是整个scrapy服务共享16个线程?又按照什么规则从不同爬虫队列中取任务的呢?

阅读 1.9k
2 个回答
  • 问题1:
    每个爬虫都会 共享 线程池中的线程
  • 问题2:
    scrapy-redis 由调度器( Scheduler )负责分配爬虫队列

    • 首先,每个爬虫都有自己独立的待抓取URL队列和已抓取URL集合。
    • 当一个请求被调度到指定的爬虫时,该爬虫会尝试从自己的待抓取URL队列中获取任务。
    • 如果该爬虫的队列为空,则它会按照权重从其他所有非空队列中获取任务。权重较高的队列将被优先选择。
    • 当一个请求成功获取到后,它将被分配给相应的爬虫进行处理,并加入到该爬虫的已抓取URL集合中。
参考:
scrapy-redis调度器配置
scrapy-redis调度器源码分析
scrapy-redis调度器源码分析(知乎)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题