Skip to content

Commit 24d071e

Browse files
committed
shutdown the active crawler on SIGINT. fixes scrapy#450
1 parent a288ced commit 24d071e

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

scrapy/crawler.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ def __init__(self, settings):
8181
self.settings = settings
8282
self.crawlers = {}
8383
self.stopping = False
84+
self._started = None
8485

8586
def create_crawler(self, name=None):
8687
if name not in self.crawlers:
@@ -95,8 +96,8 @@ def start(self):
9596
@defer.inlineCallbacks
9697
def stop(self):
9798
self.stopping = True
98-
for crawler in self.crawlers.itervalues():
99-
yield crawler.stop()
99+
if self._active_crawler:
100+
yield self._active_crawler.stop()
100101

101102
def _signal_shutdown(self, signum, _):
102103
install_shutdown_handlers(self._signal_kill)
@@ -130,20 +131,20 @@ def start_reactor(self):
130131
reactor.run(installSignalHandlers=False) # blocking call
131132

132133
def _start_crawler(self):
133-
if self.crawlers and not self.stopping:
134-
name, crawler = self.crawlers.popitem()
135-
136-
sflo = log.start_from_crawler(crawler)
137-
crawler.configure()
138-
crawler.install()
139-
crawler.signals.connect(crawler.uninstall, signals.engine_stopped)
140-
if sflo:
141-
crawler.signals.connect(sflo.stop, signals.engine_stopped)
142-
143-
crawler.signals.connect(self._check_done, signals.engine_stopped)
144-
crawler.start()
134+
if not self.crawlers or self.stopping:
135+
return
145136

146-
return name, crawler
137+
name, crawler = self.crawlers.popitem()
138+
self._active_crawler = crawler
139+
sflo = log.start_from_crawler(crawler)
140+
crawler.configure()
141+
crawler.install()
142+
crawler.signals.connect(crawler.uninstall, signals.engine_stopped)
143+
if sflo:
144+
crawler.signals.connect(sflo.stop, signals.engine_stopped)
145+
crawler.signals.connect(self._check_done, signals.engine_stopped)
146+
crawler.start()
147+
return name, crawler
147148

148149
def _check_done(self, **kwargs):
149150
if not self._start_crawler():

0 commit comments

Comments
 (0)