Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как разбить выполнение цикла на части?


Автор: Just123 14.3.2012, 11:10
Доброго дня, 

Подскажите пожалуйста, как разбить выполнение цикла на несколько частей. Это нужно для обход времени выполнения скрипта.
Не хотелось бы использовать set_time_limit (0);

Код

        for ($i=1; $i <= $this->total_page; $i++) {
            $this->get_items($i);
        }



Автор: Vardoulacha 14.3.2012, 11:16
хранить где-то, допустим в текстовом файле номер последней итерации, запускать скрипт по заданию cron выполнять очередную порцию и место остановки записывать в файл, при следующем запуске стартовать оттуда где остановились в прошлый раз

Автор: Just123 14.3.2012, 11:26
Vardoulacha, Важно, чтобы скрипт выполнялся полностью сразу т.к. данные могут меняться с течением времени.

Автор: cutwater 14.3.2012, 12:55
Цитата(Just123 @  14.3.2012,  10:26 Найти цитируемый пост)
Vardoulacha, Важно, чтобы скрипт выполнялся полностью сразу т.к. данные могут меняться с течением времени.


Пересмотреть архитектуру приложения.

Автор: Just123 14.3.2012, 13:11
Цитата

Пересмотреть архитектуру приложения.

//Здорово. Очень содержательно.  Пересмотр архитектуры наверняка даст ответ на вопрос " Как разбить выполнение цикла на части?"

Пересматривать нечего, это даже не приложение, а скрипт для парсинга. Страниц много, вот и выполняется долгое время.

Решение пока вижу только одно, разбить на N итераций и через каждые Y итераций выполнять header('Location: http://www.example.com/?итерация=№ последней итерации'); 


Автор: baldina 14.3.2012, 13:16
Цитата(Just123 @  14.3.2012,  13:11 Найти цитируемый пост)
через каждые Y итераций выполнять header

по-моему, нормально. хотя непонятно, почему
Цитата(Just123 @  14.3.2012,  11:10 Найти цитируемый пост)
Не хотелось бы использовать set_time_limit (0);


Добавлено через 1 минуту и 40 секунд
кстати можно попробовать PCNTL, хотя имхо овчинка выделки не стоит

Автор: Just123 14.3.2012, 13:21
Цитата

по-моему, нормально.

Угу, думаю, остановлюсь на нем.

Цитата

хотя непонятно, почему
Цитата

Не хотелось бы использовать set_time_limit (0);


Ограничение на хостинге.

Цитата

кстати можно попробовать PCNTL, хотя имхо овчинка выделки не стоит

С PCNTL не знаком, думаю ознакомлюсь позже, сейчас и header'a хватит по идее. Спасибо за наводку.

Автор: baldina 14.3.2012, 13:41
Цитата(Just123 @  14.3.2012,  13:11 Найти цитируемый пост)
разбить на N итераций и через каждые Y итераций выполнять header

еще можно дергать при помощи AJAX. тогда какой-то вменяемый front-end можно слепить, например с прогресс-баром

Добавлено через 1 минуту и 13 секунд
да еще и параллельно выполнять итерации, если данные позволяют

Автор: Just123 14.3.2012, 13:44
Цитата

еще можно дергать при помощи AJAX. тогда какой-то вменяемый front-end можно слепить, например с прогресс-баром

о! А это идея! Сейчас правда к сожалению сроки ужимают, но при допиливании позже обязательно сделаю. Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)