В Scrapy имеется несколько параметров concurrency, например CONCURRENT_REQUESTS. Означает ли это, что искатель Scrapy многопоточен? Итак, если я запустил scrapy crawl my_crawler
, он будет буквально запускать несколько одновременных запросов параллельно?
Я спрашиваю, потому что, я читал, что Scrapy является однопоточным.
Является Scrapy однопоточным или многопоточным?
Ответ 1
Scrapy является однопоточной, за исключением интерактивной оболочки и некоторых тестов, см. источник.
Он построен поверх Twisted, который также является однопоточным и использует его собственные асинхронные возможности concurrency например twisted.internet.interfaces.IReactorThreads.callFromThread
, см. источник.
Ответ 2
Scrapy делает большую часть работы синхронно. Однако обработка запросов выполняется асинхронно.
Я предлагаю эту страницу, если вы ее еще не видели.
http://doc.scrapy.org/en/latest/topics/architecture.html
изменить: Теперь я понимаю, что речь идет о потоковом и не обязательно асинхронном или нет. Эта ссылка все равно будет хорошо прочитана:)
относительно вашего вопроса о CONCURRENT_REQUESTS. Этот параметр изменяет количество запросов, которые скручиваются, отсрочивается сразу. После того, как будет запущено много запросов, они будут ждать завершения некоторых из них до начала работы.
Ответ 3
Scrapy - это однопоточная инфраструктура, мы не можем одновременно использовать несколько потоков в паук. Тем не менее, мы можем одновременно создавать несколько пауков и конвейеров, чтобы сделать процесс параллельным.
Scrapy не поддерживает multi-threading
, потому что он построен на Twisted
, который является Asynchronous http protocol framework
.