@devidwm

Сайт не загружается во время отработки php скрипта, как решить проблему?

Коллеги, всем привет!

Есть вопрос. Существует сайт, каталог которого заполняется через парсинг данных через фраймворк прямо с другого сайта. Учитывая, что скрипту приходится открыть более 3000 страниц и собирать с них данные, отрабатывает он очень долго. В момент работы скрипта сайт висит.
Подскажите, есть ли какой-то способ, к примеру, выделить скрипту только часть ресурсов сервера? Чтобы сайт мог загружаться во время отработки скрипта? Или единственный вариант только запускать скрипт на отдельном сервере?
  • Вопрос задан
  • 212 просмотров
Решения вопроса 1
martin74ua
@martin74ua Куратор тега Системное администрирование
Linux administrator
не запускать скрипт из сайта. Запускать например планировщиком
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Выдели запуск парсера в отдельный процесс с низким приоритетом php.net/manual/ru/function.proc-nice.php
Ответ написан
Комментировать
babarun
@babarun Куратор тега 1С-Битрикс
Безумный план моих идей в руках больных людей
Или единственный вариант только запускать скрипт на отдельном сервере?
Не единственный путь, но единственный правильный.
приходится открыть более 3000 страниц
Он же открывает их не одновременно? Делайте sleep между запросами. Не пытайтесь отпарсить всё за один проход, загружайте "сырой" html во временную таблицу, а парсинг по этим временным данным запускайте отдельно.
В идеале делайте через очередь RabbitMQ на отдельном сервере. Вот очень хороший пример.
Ответ написан
Хотелось бы еще добавить к ответу lolhunter :
Есть еще проблема в том, что при парсинге идет слишком интенсивная работа с БД и висит сервер БД. Тут причин может быть несколько:
1 Просто интенсивная запись - сделайте слип между записями, объединяйте много записей в одну транзакцию.
2 Во время записи извлекаются какие-то данные из БД - эта такая нелепая ошибка, что встречается почти всегда. Код примерно выглядит так:
foreach ($arElementsForUpdate as $arElm) {
// а тут какой-нибудь GetList с извлечением скажем цветов товаров из ИБ-справочника
// тут запись
}

Однажды вынесением вот таких косяков из цикла ускорил работу скрипта импорта с 2,5 часов до 17 секунд. И все перестало висеть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы