上一节分析了Crawler的源码,其中关键方法crawl最后会调用ExecutionEngine的open_spider和start方法。本节就结合ExecutionEngine的源码进行详细分析。
open_spider方法:
scrapy/core/engine.py:
@defer.inlineCallbacks def open_spider(self, spider, start_requests=(),
本文深入分析scrapy的ExecutionEngine源码,探讨open_spider方法中CallLaterOnce、reactor.callLater和slot的机制。CallLaterOnce用于确保函数只调用一次,而heartbeart借助LoopingCall每5秒检查并处理新的request。slot维护了请求的生命周期和进行中的请求状态。
上一节分析了Crawler的源码,其中关键方法crawl最后会调用ExecutionEngine的open_spider和start方法。本节就结合ExecutionEngine的源码进行详细分析。
open_spider方法:
scrapy/core/engine.py:
@defer.inlineCallbacks def open_spider(self, spider, start_requests=(),
1079
3202
8566