Автор Тема: "Тяжелый" скрипт  (Прочитано 48 раз)

14 Февраль 2018, 09:45:01
  • Фрилансер
  • *
  • Сообщений: 106
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вопрос, скорее не по PS, а по PHP...

Есть "тяжелый" скрипт, который работает с таблицами PS и облаком. Могу обрабатывать за 1 раз по 50 записей из таблицы ps_customers.

Есть  идея вызывать его через curl , меняя параметры и двигаясь по таблице с шагом 50, НО.
Сейчас у меня 1000+ записей - это получается 20 процессов, завтра будет 10000 - это будет уже 200 процессов.

Как можно изящно решить эту проблему?
14 Февраль 2018, 11:03:27
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 15099
  • Репутация: +14588/-5
  • Сообщество PrestaShop
    • Просмотр профиля
С прекращением работы скрипта процесс должен уничтожаться. Сервер настройте правильно и проблема решится.
14 Февраль 2018, 11:51:22
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 1242
  • Репутация: +15/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Можно так
1. Создать флаг, шаг и хранить значение в базе или сессии.
2. В скрипте проверять значение флага.
3. Отрабатывать цикл до N-итераций (шаг), сохранять позицию в переменную флаг.
4. При достижении конца флаг = 0.
5. Запускать по крону
14 Февраль 2018, 12:09:38
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 1142
  • Репутация: +5/-1
  • Сообщество PrestaShop
    • Просмотр профиля
// Проход за один процесс
$pos = mysql_num_rows( $res);
while($pos) {
    // код
    // ...
    // pos--
    // Время сна между итерациями (зависит от возможностей хостинга)
    sleep(...);
}
14 Февраль 2018, 12:29:48
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 1242
  • Репутация: +15/-1
  • Сообщество PrestaShop
    • Просмотр профиля
// Проход за один процесс
$pos = mysql_num_rows( $res);
while($pos) {
    // код
    // ...
    // pos--
    // Время сна между итерациями (зависит от возможностей хостинга)
    sleep(...);
}
Если памяти мало, сервер слабый, посетителей много, сайт упадет. Лучше завершить процесс и повторить через время.