Параллелизм/проблемы с производительностью при использовании Scrapyd и одиночного паука

Контекст

Я запускаю scrapyd 1.1 + scrapy 0.24.6 с одним «гибридным селен-скрейпи» пауком, который сканирует множество доменов в соответствии с параметрами. Машина для разработки, на которой размещаются экземпляры scrapyd, представляет собой OSX Yosemite с 4 ядрами, и это моя текущая конфигурация:

[scrapyd]
max_proc_per_cpu = 75
debug = on

Вывод при запуске scrapyd:

2015-06-05 13:38:10-0500 [-] Log opened.
2015-06-05 13:38:10-0500 [-] twistd 15.0.0 (/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python 2.7.9) starting up.
2015-06-05 13:38:10-0500 [-] reactor class: twisted.internet.selectreactor.SelectReactor.
2015-06-05 13:38:10-0500 [-] Site starting on 6800
2015-06-05 13:38:10-0500 [-] Starting factory <twisted.web.server.Site instance at 0x104b91f38>
2015-06-05 13:38:10-0500 [Launcher] Scrapyd 1.0.1 started: max_proc=300, runner='scrapyd.runner'

РЕДАКТИРОВАТЬ:

Количество ядер:

python -c 'import multiprocessing; print(multiprocessing.cpu_count())' 
4

Проблема

Я хотел бы, чтобы установка обрабатывала 300 заданий одновременно для одного паука, но scrapyd обрабатывает от 1 до 4 за раз, независимо от того, сколько заданий ожидает:

Консоль Scrapy с заданиями

РЕДАКТИРОВАТЬ:

Использование ЦП не является подавляющим:

Использование ЦП для OSX

ПРОВЕРЕНО НА УБУНТУ

Я также протестировал этот сценарий на виртуальной машине Ubuntu 14.04, результаты более или менее такие же: во время выполнения было достигнуто максимум 5 запущенных заданий, не было чрезмерной нагрузки на ЦП, примерно столько же времени потребовалось для выполнения того же количества задач. задачи.


person gerosalesc    schedule 05.06.2015    source источник
comment
Не могли бы вы проверить, правильно ли модуль многопроцессорности считает ядра процессора? Эта команда должна напечатать 4: python -c 'import multiprocessing; print(multiprocessing.cpu_count())'   -  person Elias Dorneles    schedule 07.06.2015
comment
@elias 4 действительно, я также добавлю использование процессоров в пост   -  person gerosalesc    schedule 08.06.2015
comment
Из журналов видно, что вам будет разрешено до 300 процессов, поэтому я подозреваю, что вы столкнулись с узким местом в другом месте. Вы страдаете от того факта, что scrapyd назначает на проект только одного паука за раз? См. раздел stackoverflow.com/questions/11390888/.   -  person Peter Brittain    schedule 20.06.2015
comment
@PeterBrittain Я нашел ключ к решению этого связанного вопроса, это был POLL_INTERVAL, хотите награду?   -  person gerosalesc    schedule 24.06.2015
comment
Спасибо! Если вы предлагаете, я не откажусь на данном этапе моего членства ... Я опубликую ответ сейчас.   -  person Peter Brittain    schedule 25.06.2015


Ответы (2)


Журналы показывают, что у вас разрешено до 300 процессов. Таким образом, предел находится выше по цепочке. Мое первоначальное предположение заключалось в том, что это была сериализация вашего проекта, описанная в Запуск нескольких пауков с использованием scrapyd.

Последующее расследование показало, что ограничивающим фактором на самом деле был интервал опроса.

person Peter Brittain    schedule 24.06.2015

Моя проблема заключалась в том, что мои рабочие места длились на время меньше, чем POLL_INTERVAL значение по умолчанию, которое составляет 5 секунд, поэтому до окончания предыдущей не было опрошено достаточное количество задач. Изменение этого параметра на значение, меньшее средней продолжительности задания сканера, поможет scrapyd опрашивать больше заданий для выполнения.

person gerosalesc    schedule 25.06.2015