Как узнать в скрипте - далеко ли еще до max_execution_time?

  • Автор темы Автор темы antd2000
  • Дата начала Дата начала
а вот универсальные скрипты рассчитанные на установку на произвольный хостинг, тут сложнее %)
А для чего таким продуктам время исполнения > пары секунд то?)
 
это уже у тредстартера надо спрашивать =)

(пере)генерация какая нибудь.
 
Автор оригинала: nerezus
А для чего таким продуктам время исполнения > пары секунд то?)
Для перегонки xml (сотни Мегабайт) в БД.

Кстати сработало ini_set("max_execution_time", "0");
 
Автор оригинала: fixxxer
Элементарно:

PHP:
class TimeoutCatcher {

    protected $enabled = false;

    public function __construct() {
        register_shutdown_function( array($this, 'onShutdown') );
    }
    
    public function enable() {
        $this->enabled = true;
    }   
    
    public function disable() {
        $this->enabled = false;
    }   
    
    public function onShutdown() {
        if ($this->enabled) {
            print "Timed out!\n";
        }   
    }   
    
}

// test
set_time_limit(1);
$TimeoutCatcher = new TimeoutCatcher;
$TimeoutCatcher->enable();
// long operation
for ($i=0; $i<50000000; ++$i) { /* pass */ }
// end of long operation
$TimeoutCatcher->disable();
print "Finished!\n";

-~{}~ 10.12.09 20:54:

тут, конечно, не проверяется, что был именно таймаут - но на это обычно можно забить =)
fixxxer, спасибо. Мне помогло. Хотя у меня задача немного другая была. От себя только добавил "error_reporting(0)" в начало, чтобы лишне не выводилось.
 
Интересно, сколько за свою работу получают фрилансеры, пишушие скрипты для заказчиков, которым дорого потратить несколько баксов в месяц на нормальный хостинг.
nerezus
Копейки... Но при правильном выборе проектов и заказчиков получать в месяц 2,5к$+ абсолютно реально, причем имея 3 выходных дня в неделю.

Если же по теме, то:
аффтар преследует некоторую цель которую объяснить нам не удосужился и тем не менее уверен что решение его проблемы кроеццо исключительно в том как узнать время до конца выполнения.
Рассчитывать время до конца выполнения, вводить определённую систему сохранения/приостановки/продолжения
задачи крайне геморно.
Задача в текущей постановке не имеет красивого и быстрого решения (ИМХО), может сменим формулировку и обсудим реальную проблему?
 
Вполне вероятно, что автору эта тема уже неинтересна/неактуальна - началось всё почти год назад.
Я же просто спасибо fixxxer'у написал, потому как в моей задаче это было решением.

Возможно и автор преследовал такие же цели как и я - иметь возможность корректно завершить скрипт, даже если он будет остановлен "ненормальным" способом.

К тому, что я написал в предыдущем посте ещё добавил "err_handler()", потому как некоторые хостеры дополнительно пишут логи с ошибками в файл. Чтобы этот файл не писался/не разростался, я заменил стандартный обработчик ошибок своим. Единственное, что он делает - возвращает true.
 
Автор оригинала: seelts
....добавил "err_handler()", потому как некоторые хостеры дополнительно пишут логи с ошибками в файл. Чтобы этот файл не писался/не разростался...

Феерично! А просто исправить ошибки религия не позволяет?
 
Если бы можно было исправить ошибку, возникающую при превышении времени исполнения, то эта тема вообще не возникла бы...

Замдиректору не плохо было бы читать всю тему, а не последние пару постов. Или религия не позволяет?
 
то есть ситуация с превышением времени столь типична, что вызывает существенное разрастание лога? и с этим нужно бороться такими ущербными методами?
 
что мешает пускать долгоиграющие скрипты в CLI моде, если все равно нужно как-то доделывать прерванные задачи?
 
Типичная проблема на хостингах за "400" рублей в месяц.
И как правило проблема не в логике приложения, а в объемах обрабатываемых данных.

Если хостинг в crontab'e юзает wget или curl, тогда надо юзать редирект на "самого себя" с get параметром отсечения обработанных данных.
 
Меня всегда поражает эта вот особенность у многих людей: предложить решение другой задачи вместо конкретной заданной.
Да, возможно, изначальная цель достигается огромным кол-вом других более изящных способов. Однако был конкретный вопрос - как узнать оставшееся время. Насколько я понял, ответом является "никак".
Может пора уже закрыть тему? Тем более что и автора тут уже не видно.
 
seelts
А меня поражают такие археологи как ты.
 
seelts print "Timed out!\n"; Ну как так... Ты хоть видел реально программиста который вот так вот подвёл черту под своим алгоритмом!
 
Viktor_Rez,
а с чего ты решил что я так сделал?
то был лишь вариант от fixxxer'а, который позволил мне решить свою задачу (которая как я уже говорил отличается от той, что была озвучена автором этой темы).
более того зарегистрировался здесь я только лишь для того чтобы написать "спасибо" fixxxer'у. просто тут как я вижу очень много "умных и продвинутых" участников, блещущих знаниями, однако ж почему то не могущих предложить ничего конкретного на поставленный вопрос.
 
Re: Как узнать в скрипте - далеко ли еще до max_execution_time?

Автор оригинала: antd2000
Как известно max_execution_time это не есть реальное время выполнения скрипта, а "чистое время" которое скрипт занимает у процессора.
То есть скрипт может например выполнятся хоть 10 минут и запросто уложится в max_execution_time 30 сек.

Так вот.
Можно как то узнать в скрипте - сколько скрипт уже занял этого самого процессорного времени?
Пожалуйста - не утаивайте от нас тайну! Что вам сказал fixxxer! Ведь ваш ответ может быть войдет в историю!
 
Viktor_Rez,
если это был ко мне вопрос, то

он мне ничего не сказал. он всего лишь привёл тут пример использования функции register_shutdown_function()... это и помогло мне решить мою задачу.
А ответом на вопрос "Можно как то узнать в скрипте - сколько скрипт уже занял этого самого процессорного времени?", насколько я понимаю является "никак".
 
seelts
Понимаю. Дело хорошее, помогать google или yandex индексировать замечательный форум на предмет часто встречающихся задач. =)
 
Сверху