сведение к минимуму времени выполнения путем размещения сценариев в правильном порядке

Я использую scrapy и scrapyd, чтобы сканировать контент. У меня работает 28 сканеров, но только 8 одновременно. Каждый сканер длится от 10 минут до нескольких часов. Поэтому я ищу способ правильно их упорядочить, чтобы минимизировать время активности сервера.

Я уже собираю информацию о том, сколько времени занимает каждое сканирование, так что это только проблема минимизации или как ее сформулировать.

Скрипт запускается с использованием php, поэтому решения должны запускаться на php.

0

Решение

Лучший способ, который я нашел, — настроить их как cronjobs для выполнения в определенное время. У меня есть около 30 cronjobs, настроенных на запуск в разное время, что означает, что вы можете установить определенное время для каждого записки.

Выполнение команды PHP с помощью cronjob в 17:00 каждый день:

* 17 * * * php /opt/test.php

Если вы выполняете команду scrapy python через cronjob, это:

* 17 * * * cd /opt/path1/ && scrapy crawl site1

Если вы используете virtualenv для вас Python, то его

* 17 * * * source /opt/venv/bin/activate && cd /opt/path1/ && scrapy crawl site1
0

Другие решения

Извините, что разочаровал вас, но в том, что вы описываете, нет ничего умного и никакой проблемы минимизации, потому что вы ничего не говорите о зависимостях между сканирующими заданиями. Самостоятельная работа займет ~ TOTAL_TIME/THROUGHPUT независимо от того, как вы их заказываете.

scrapyd начнет обрабатывать следующее задание, как только оно закончится. «8 за один раз» не является чем-то вроде корзины, поэтому здесь нет проблем комбинаторного / динамического программирования. Просто бросьте все 28 заданий на соскреб и дайте ему поработать. Когда вы проводите опрос и находите его бездействующим, вы можете выключить свой сервер.

У вас могут быть небольшие преимущества, если вы сначала запланируете самые длинные работы. Вы можете быстро сжимать несколько крошечных заданий в незанятых слотах, пока заканчиваются последние несколько длинных заданий. Но если вы не в каком-то плохом случае, эти преимущества не должны быть значительными.

Отметим также, что это число8«- Я думаю, подкрепляется max_proc_per_cpu и / или max_proc — несколько произвольно. Если это не число, на которое вы попали в 100% ЦП или что-то в этом роде, возможно, большее число будет более подходящим.

Если вы хотите получить значительные выгоды, найдите 2-3 самых крупных рабочих места и найдите способ сократить их наполовину, например, если вы сканируете сайт с транспортными средствами, разделите одиночное сканирование на два, один для автомобилей и один для мотоциклов. Это обычно возможно и даст более значительные преимущества, чем изменение порядка. Например, если ваша более длительная работа составляет 8 часов, а следующая более длительная — 5, разделив самый длинный на два-четыре часа обхода, вы сделаете 5-часовую работу узким местом, потенциально сэкономив вашему серверу 3 часа.

0

По вопросам рекламы [email protected]