В настоящее время я создаю сценарий Scrapy, который выполняет широкий обход со следующими настройками:
'CONCURRENT_REQUESTS': 600,
'CONCURRENT_REQUESTS_PER_DOMAIN': 25,
'CONCURRENT_ITEMS': 250,
'REACTOR_THREADPOOL_MAXSIZE': 600,
Чтобы выполнить широкий обход, я перебираю список доменов в моем пауке следующим образом:
def start_requests(self):
for domain in self.domains:
yield scrapy.Request("https://www." + domain['domain'], self.parse, meta={'domain':domain})
Цикл работает хорошо, совершая более 10 вызовов в секунду.
Я заметил, однако, что весь мой отход замедляется, как только я отправляю свои первые элементы для обработки в моем конвейере(который выполняет простые циклы и условные проверки).
Похоже, что проблема в том, что цикл в start_requests () ожидает завершения обработанных в данный момент элементов, прежде чем продолжить мой общий обход новых доменов, и это несмотря на то, что это не так. ниже моего предела 'CONCURRENT_REQUESTS'.
Результатом является сценарий, который выполняется в 2–3 раза медленнее.
Разве обработка элементов не должна блокировать запросы?