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


Автор: letsgo 14.3.2009, 11:42
Добрый день.
На хостинге стандартное ограничение в 30 секунд.
Воспользовался set_time_limit()

Однако, возник вопрос, иногда время выполнения скрипта занимает порядка 20 секунд, а иногда и 100 секунд не хватает. Т.е. не подгадать.
Если ставить фиксированное значение, то оно может оказаться недостаточным для выполнения скрипта.
Есть ли какая-то функция, позволяющая например, останавливать выполнение скрипта и скажем грубо, "начинать вновь с места остановки через n секунд".
Ну, или как-то с set_time_limit() придумать что-то можно?

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

Автор: NNaarreekk 14.3.2009, 11:54
set_time_limit(0) делает время бесконечным (если конечно сервер не на сейф моде).
Но конечно в таком случае если случаем бесконечный цикл получится то пипец!

Автор: letsgo 14.3.2009, 12:03
NNaarreekk, ясно. спасибо.

А вот про это ничего не можете сказать?
Цитата

Есть ли какая-то функция, позволяющая например, останавливать выполнение скрипта и скажем грубо, "начинать вновь с места остановки через n секунд".


Цитата

решение проблемы, вижу, что-то вроде многопоточности...

Автор: NNaarreekk 14.3.2009, 12:39
Ну можешь после каждого шага(или если в функции цикл,то после каждого круга) проверять время вы полнения и если больше чем надо то return false;
А потом как нибудь опять вызываешь, примерно так:
Код

function qwerty($count){
    $time=date('U');
    for($i=0;$i<$count;$i++){
        if(date('U')-$time>123)return false;
        /*-----Твой код-----*/
        $time=date('U');
    }
return true;
}

//вызываешь это скажем так
while(!qwerty(222))continue;


Пример может извращенеский, написал то что пришло в голову! smile 

Автор: skyboy 14.3.2009, 20:09
Цитата(NNaarreekk @  14.3.2009,  11:39 Найти цитируемый пост)
while(!qwerty(222))continue;

тебя порвет хостер за нагрузку на сервер.
или сам себя порвешь, если сервер собственный.
если задержка будет поболее 0,01 секунды.

Автор: NNaarreekk 14.3.2009, 22:33
skyboy, я не понял, откуда нагрузка возьмется??
Ну понимаю что нагрузка увеличится, но если нужно повторно вызвать, то как бы не вызывай все равно нагрузка увеличится!

Автор: skyboy 14.3.2009, 22:47
конструкция 
Цитата(NNaarreekk @  14.3.2009,  11:39 Найти цитируемый пост)
while(!qwerty(222))continue;

не даст выполнится коду 
Цитата(NNaarreekk @  14.3.2009,  11:39 Найти цитируемый пост)
 /*-----Твой код-----*/

раньше некоторого времени. но сама проверка(вычисление разницы между текущим временем и начальным) отнюдь не "бесплатна". и происходить эта проверка будет не "раз в секунду", а постоянно.
вот напиши на любом языке программирования программу типа:
Код

while(true) gettime();

и посмотри на загрузку процессора

Автор: NNaarreekk 14.3.2009, 23:34
ОК понятно!
А как писать то?

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