Какое влияние на повышение CloseSpider в Scrapy?

Я хочу знать, какое влияние поднимает CloseSpider. В документации http://doc.scrapy.org/en/latest/topics/exceptions.html об этом нет информации. Как известно, scrapy обрабатывает несколько запросов одновременно. Что если это исключение будет вызвано до того, как будет обработан последний запрос? Будет ли он ждать обработки запросов на отдых, которые были выполнены раньше? Пример:

def parse(self, response):
    my_url = 'http://someurl.com/item/'
    for i in range(1, 100):
         my_url += str(i)
         if i == 50:
             raise CloseSpider('')
         else:
             yield Request(url=my_url, callback=self.my_handler)

def my_handler(self, response):
     # handler

Спасибо за ваши ответы.

======================== Возможное решение:

is_alive = True

def parse(self, response):
    my_url = 'http://url.com/item/'
    for i in range(1, 100):
        if not is_alive:
            break
        my_url += str(i)
        yield Request(url=my_url, callback=self.my_handler)

def my_handler(self, response):
    if (response do not contains new item):
        is_alive = False

1 ответ

Решение

Согласно исходному коду, если есть CloseSpider Возникает исключение, engine.close_spider() метод будет выполнен:

def handle_spider_error(self, _failure, request, response, spider):
    exc = _failure.value
    if isinstance(exc, CloseSpider):
        self.crawler.engine.close_spider(spider, exc.reason or 'cancelled')
        return

engine.close_spider() Сам бы закрыл паука и очистил бы все оставшиеся запросы:

def close_spider(self, spider, reason='cancelled'):
    """Close (cancel) spider and clear all its outstanding requests"""

    slot = self.slot
    if slot.closing:
        return slot.closing
    logger.info("Closing spider (%(reason)s)",
                {'reason': reason},
                extra={'spider': spider})

    dfd = slot.close()

    # ...

Было бы также запланировать close_spider() требует различных компонентов архитектуры Scrapy: загрузчик, скребок, планировщик и т. д.

Другие вопросы по тегам