From 2a5c7ed4dae4d8adc404f12e92d351d738446517 Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Wed, 20 Mar 2013 14:40:30 -0300 Subject: [PATCH] make Crawler.start() return a deferred that is fired when the crawl is finished --- docs/topics/api.rst | 1 + scrapy/core/engine.py | 3 +++ 2 files changed, 4 insertions(+) diff --git a/docs/topics/api.rst b/docs/topics/api.rst index af9a85a63..4f7eb19d2 100644 --- a/docs/topics/api.rst +++ b/docs/topics/api.rst @@ -101,6 +101,7 @@ how you :ref:`configure the downloader middlewares .. method:: start() Start the crawler. This calls :meth:`configure` if it hasn't been called yet. + Returns a deferred that is fired when the crawl is finished. Settings API ============ diff --git a/scrapy/core/engine.py b/scrapy/core/engine.py index 20a22bb90..d30c747c9 100644 --- a/scrapy/core/engine.py +++ b/scrapy/core/engine.py @@ -74,6 +74,8 @@ class ExecutionEngine(object): self.start_time = time() yield self.signals.send_catch_log_deferred(signal=signals.engine_started) self.running = True + self._closewait = defer.Deferred() + yield self._closewait def stop(self): """Stop the execution engine gracefully""" @@ -284,3 +286,4 @@ class ExecutionEngine(object): @defer.inlineCallbacks def _finish_stopping_engine(self): yield self.signals.send_catch_log_deferred(signal=signals.engine_stopped) + self._closewait.callback(None)