Являются ли scrapy CONCURRENT_REQUESTS для паука или машины? - PullRequest
0 голосов
/ 19 сентября 2018

Новичок разрабатывает свою архитектуру вопрос здесь:

Моя цель Я хочу отслеживать несколько профилей Twitter с течением времени.

То, что я хочу построить: A SpiderMother класс, который взаимодействует с некоторой базой данных (содержащей CrawlJobs), чтобы порождать и управлять множеством маленьких пауков, каждый сканируя 1 пользовательскую страницу в твиттере на своемнерегулярный интервал (задания будут добавляться в базу данных по некоторому алгоритму).Они порождаются как подпроцессы SpiderMother, и в зависимости от успешности сканирования задание базы данных удаляется.Это хорошая архитектура?

Проблема, которую я вижу:

Допустим, я породил 100 пауков, и мой предел CONCURRENT_REQUESTS равен 10, будет ли твиттер.com пораженвсе 100 пауков сразу или они выстраиваются в линию и ходят один за другим?

1 Ответ

0 голосов
/ 20 сентября 2018

Большинство настроек scrapy / конфигурации времени выполнения будут изолированы для текущего открытого паука во время выполнения.По умолчанию загрузчик запросов Scrapy будет действовать только для каждого паука, так что вы действительно увидите 100 одновременных запросов, если запустите 100 процессов.У вас есть несколько вариантов принудительного использования параллелизма на уровне домена в глобальном масштабе, и ни один из них не является особенно беспроблемным:

  1. Используйте только одного паука, работающего на домен, и пропустите его через redis (см. scrapy-redis ).В качестве альтернативы не порождайте более одного паука за раз.
  2. Имейте фиксированный пул пауков или ограничьте количество пауков, которые вы порождаете у своего оркестратора.Задайте для параметров параллелизма значение «требуемая_конкурренность, деленная на количество пауков».
  3. Переопределение поведения класса загрузчика scrapy для внешнего хранения его значений (например, в redis).

Лично я, вероятно, хотел быпереходите к первому, и если ограничение производительности одного масштабного процесса попадает во второе.

...