From 7727d87f646d03a9f4d0d30d3dcc1161dd1cb1b5 Mon Sep 17 00:00:00 2001 From: Paul Tremberth Date: Mon, 7 Nov 2016 16:44:57 +0100 Subject: [PATCH] Test Slot's heartbeat state before stopping it Also add a test on state of looping task in LogStats extension Fixes #2011 and #2362 --- scrapy/core/engine.py | 3 ++- scrapy/extensions/logstats.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scrapy/core/engine.py b/scrapy/core/engine.py index 3c4bc662c..2b5770138 100644 --- a/scrapy/core/engine.py +++ b/scrapy/core/engine.py @@ -48,7 +48,8 @@ class Slot(object): if self.closing and not self.inprogress: if self.nextcall: self.nextcall.cancel() - self.heartbeat.stop() + if self.heartbeat.running: + self.heartbeat.stop() self.closing.callback(None) diff --git a/scrapy/extensions/logstats.py b/scrapy/extensions/logstats.py index 647e50f8d..b685e7b19 100644 --- a/scrapy/extensions/logstats.py +++ b/scrapy/extensions/logstats.py @@ -15,6 +15,7 @@ class LogStats(object): self.stats = stats self.interval = interval self.multiplier = 60.0 / self.interval + self.task = None @classmethod def from_crawler(cls, crawler): @@ -47,5 +48,5 @@ class LogStats(object): logger.info(msg, log_args, extra={'spider': spider}) def spider_closed(self, spider, reason): - if self.task.running: + if self.task and self.task.running: self.task.stop() -- GitLab