From 8aca66252a91c65d093014ff8ee72f526eb49450 Mon Sep 17 00:00:00 2001 From: Mikhail Korobov Date: Wed, 3 Feb 2016 05:37:40 +0500 Subject: [PATCH] more efficient ExecutionEngine.spider_is_idle --- scrapy/core/engine.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/scrapy/core/engine.py b/scrapy/core/engine.py index ef4403106..3c4bc662c 100644 --- a/scrapy/core/engine.py +++ b/scrapy/core/engine.py @@ -177,12 +177,23 @@ class ExecutionEngine(object): return d def spider_is_idle(self, spider): - scraper_idle = self.scraper.slot.is_idle() - pending = self.slot.scheduler.has_pending_requests() - downloading = bool(self.downloader.active) - pending_start_requests = self.slot.start_requests is not None - idle = scraper_idle and not (pending or downloading or pending_start_requests) - return idle + if not self.scraper.slot.is_idle(): + # scraper is not idle + return False + + if self.downloader.active: + # downloader has pending requests + return False + + if self.slot.start_requests is not None: + # not all start requests are handled + return False + + if self.slot.scheduler.has_pending_requests(): + # scheduler has pending requests + return False + + return True @property def open_spiders(self):