scrapy的调度疑问?
假设在一个scrapy-redis服务中启动了2个爬虫,CONCURRENT_REQUESTS为默认设置,也就是线程池中有16个线程,那么是每个爬虫有16个线程还是整个scrapy服务共享16个线程?又按照什么规则从不同爬虫队列中取任务的呢?
回答:
- 问题1:
每个爬虫都会 共享 线程池中的线程 问题2:
scrapy-redis
由调度器(Scheduler
)负责分配爬虫队列- 首先,每个爬虫都有自己独立的待抓取URL队列和已抓取URL集合。
- 当一个请求被调度到指定的爬虫时,该爬虫会尝试从自己的待抓取URL队列中获取任务。
- 如果该爬虫的队列为空,则它会按照权重从其他所有非空队列中获取任务。权重较高的队列将被优先选择。
- 当一个请求成功获取到后,它将被分配给相应的爬虫进行处理,并加入到该爬虫的已抓取URL集合中。
参考:
scrapy-redis调度器配置
scrapy-redis调度器源码分析
scrapy-redis调度器源码分析(知乎)
回答:
以上是 scrapy的调度疑问? 的全部内容, 来源链接: utcz.com/p/938944.html