Является Scrapy однопоточным или многопоточным?

В Scrapy имеется несколько параметров concurrency, например CONCURRENT_REQUESTS. Означает ли это, что искатель Scrapy многопоточен? Итак, если я запустил scrapy crawl my_crawler, он будет буквально запускать несколько одновременных запросов параллельно? Я спрашиваю, потому что, я читал, что 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.