Skip to content

Commit 12693a5

Browse files
committed
fix regression on lazy evaluation of start requests
1 parent e429f63 commit 12693a5

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

scrapy/crawler.py

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import signal
2+
from itertools import chain
23

34
from twisted.internet import reactor, defer
45

@@ -21,8 +22,7 @@ def __init__(self, settings):
2122

2223
spman_cls = load_object(self.settings['SPIDER_MANAGER_CLASS'])
2324
self.spiders = spman_cls.from_crawler(self)
24-
25-
self.scheduled = {}
25+
self._scheduled = {}
2626

2727
def install(self):
2828
import scrapy.project
@@ -46,20 +46,17 @@ def configure(self):
4646

4747
def crawl(self, spider, requests=None):
4848
spider.set_crawler(self)
49-
5049
if self.configured and self.engine.running:
51-
assert not self.scheduled
52-
return self.schedule(spider, requests)
50+
assert not self._scheduled
51+
return self._schedule(spider, requests)
52+
elif requests is None:
53+
self._scheduled[spider] = None
5354
else:
54-
self.scheduled.setdefault(spider, []).append(requests)
55-
56-
def schedule(self, spider, batches=[]):
57-
requests = []
58-
for batch in batches:
59-
if batch is None:
60-
batch = spider.start_requests()
61-
requests.extend(batch)
55+
self._scheduled.setdefault(spider, []).append(requests)
6256

57+
def _schedule(self, spider, batches=()):
58+
requests = chain.from_iterable(batches) \
59+
if batches else spider.start_requests()
6360
return self.engine.open_spider(spider, requests)
6461

6562
def _spider_closed(self, spider=None):
@@ -70,8 +67,8 @@ def _spider_closed(self, spider=None):
7067
def start(self):
7168
yield defer.maybeDeferred(self.configure)
7269

73-
for spider, batches in self.scheduled.iteritems():
74-
yield self.schedule(spider, batches)
70+
for spider, batches in self._scheduled.iteritems():
71+
yield self._schedule(spider, batches)
7572

7673
yield defer.maybeDeferred(self.engine.start)
7774

0 commit comments

Comments
 (0)