Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Ограничение по времени выполнения отдельных участков кода (https://javascript.ru/forum/server/16411-ogranichenie-po-vremeni-vypolneniya-otdelnykh-uchastkov-koda.html)

greatilya 07.04.2011 05:15

Ограничение по времени выполнения отдельных участков кода
 
Допустим имеется:

for($i=1;$i<=10;$i++) {

// тут мы выполняем некие действия которые теоретически могут 
// затянуться по времени, а нам это не нужно, и мы хотим в этом 
// случае оборвать скрипт

}


Допустим я хочу на каждую итерацию цикла установить 30 секунд, то как мне это сделать? Нужно что-то типа:

$limit=30;
for($i=1;$i<=10;$i++) {
set_time_limit($limit); $limit+=30;
// тут мы выполняем некие действия которые теоретически могут 
// затянуться по времени, а нам это не нужно, и мы хотим в этом 
// случае оборвать скрипт

}


Подскажите так можно написать? (я не знаю как это проверить). Может подскажете более правильный вариант.

x-yuri 07.04.2011 06:33

запускать по cron'у каждый 30 секунд, а в скрипте учесть, что он может не успеть что-то сделать. А вообще сложно отвечать на такой абстрактный вопрос

micscr 07.04.2011 10:51

Считай (пример 1) длительность и анализируй если надо соскочить с некой итерации цикла

greatilya 07.04.2011 11:18

Цитата:

Сообщение от x-yuri
А вообще сложно отвечать на такой абстрактный вопрос

хм) а мне вопрос показался достаточно конкретным, могу даже переформулировать: "как задать ограничение по времени на выполнение участка кода?"

Цитата:

Сообщение от micscr
Считай

да это конечно понятный вариант, но дело в том, что если скрипт большой, то придется в большое количество мест вставлять проверку времени...

А вот такая конструкция разве не поможет?
set_time_limit($limit); $limit+=30;

Допускается ли использование set_time_limit несколько раз? будет ли она при этом работать?
ПС: проблема еще в том, что я не могу придумать способа это проверить...

x-yuri 07.04.2011 11:51

Цитата:

Сообщение от greatilya
хм) а мне вопрос показался достаточно конкретным, могу даже переформулировать: "как задать ограничение по времени на выполнение участка кода?"

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

Цитата:

Сообщение от greatilya
Допускается ли использование set_time_limit несколько раз? будет ли она при этом работать?
ПС: проблема еще в том, что я не могу придумать способа это проверить...

оно так не работает. Проверить можно так
$limit=2;
for ($i=0; $i<10; $i++) {
  echo '.';
  if ($i == 1)
    echo "\nyou ain't gonna see this\n";
  set_time_limit($limit);
  $limit += 2;
  sleep( 3 );
}

greatilya 07.04.2011 15:03

Цитата:

Сообщение от x-yuri
оно так не работает

всё, спасибо, понял.


Часовой пояс GMT +3, время: 16:01.