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

antd2000

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

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

Так вот.
Можно как то узнать в скрипте - сколько скрипт уже занял этого самого процессорного времени?
 

zerkms

TDD infected
Команда форума
сделать в начале скрипта засечку и проверять.
+ ini_get()
 

DiMA

php.spb.ru
Команда форума
max_execution_time не имеет никакого отношения к чистому времени или процессорам, а как раз реальное время выполнения

можно, но сложно, так что - никак
 

antd2000

Новичок
Автор оригинала: Krishna
Зачем?
Чтобы вовремя корректно завершить работу скрипта и сохранить даные.

-~{}~ 09.10.09 18:56:

А еще чтобы знать каков у скрипта запас по времени.
 

vovanium

Новичок
antd2000
Получаешь время из ini_get прибавляешь к time() -1 (для запаса) получаешь время окончания работы, периодически проверяешь чтобы time() был меньше времени окончания работы.
 

antd2000

Новичок
vovanium

Из ini_get получить max_execution_time ?
Это опять сравнивать время загрузки процессора с реальным временем?
 

vovanium

Новичок
antd2000
Да, max_execution_time это просто время выполнения скрипта по умолчанию, никакого отношения к загрузке процессора не имеет.
Поэтому и сравниваешь с обычным временем.
Если скрипт запустился в 10:00:00 и max_execution_time = 30, то скрипт вырубится в 10:00:30 (на самом деле возможно дольше так как не учитываются внешние процессы, типа время выполнения system или запросов к базе, но это не столь важно в данном случае). Но желательно для подстраховки выключать скрипт чуть раньше.
 

nerezus

Вселенский отказник
Зачем оно надо? Скрипт же доли секунды выполняется.
 

vovanium

Новичок
nerezus
Вроде ж уже давно на форуме, чтобы такие вопросы задавать, или по-твоему на php только странички сайта генерятся?
Мало ли что нужно распарсить и загнать в базу xml'ку с товарами, логи обработать или еще что, в общем есть длительные операции, которые и часами могут выполняться.
 

vovanium

Новичок
iceman
Ты что попугай? Видели все твоё сообщение, но не всегда этот вариант подходит...
Т.к. человек запускающий ресурсоемкую задачу и человек имеющий доступ к консоли не всегда одно и то же лицо. Да и я посмотрю на тебя как ты будешь какой-нибудь блондинке объяснять как запускать задачу из консоли.
 

nerezus

Вселенский отказник
vovanium <sarcasm>о да, надо помогать юзверю строить ему костыль даже тогда. когда задачу можно решить нормально.</sarcasm>
Да, на тех задачах, под которые используются дешевые шаред-хостинги, пхп только генерирует страничку.
И нет смысла за деньги с таких проектов сильно заморачиваться.
 

phprus

Moderator
Команда форума
DiMA
max_execution_time не имеет никакого отношения к чистому времени или процессорам, а как раз реальное время выполнения
Неа. Реальное время выполнения - это время, которое видит пользователь. Те реальное время учитывает сколько времени процесс использовал процессор, сколько времени он ждал I/O, сколько времени он спал.
Вот что говорит time для скрипта <?php sleep(10); ?>
Код:
phprus@****:~/tmp> time php 5.php
real    0m10.210s
user    0m0.012s
sys     0m0.020s
А настройка max_execution_time (в *NIX) учитывает только то время, которое скрипт использовал процессор и при том только в user-space.
Цитата из документации:
The maximum execution time is not affected by system calls, stream operations etc.
А вот эксперимент:
Код:
phprus@****:~/tmp> cat 5.php
<?php
set_time_limit(1);
while(true);
?>
phprus@****:~/tmp> time php 5.php
PHP Fatal error:  Maximum execution time of 1 second exceeded in /home/phprus/tmp/5.php on line 3

real    0m1.028s
user    0m1.012s
sys     0m0.012s
phprus@****:~/tmp> cat 6.php
<?php
set_time_limit(1);
sleep(10);
?>
phprus@****:~/tmp> time php 6.php

real    0m10.027s
user    0m0.024s
sys     0m0.004s
phprus@****:~/tmp>
 

vovanium

Новичок
nerezus
Причем тут шаред хостинги, или для тебя удивительно что сайтом может заниматься больше одного человека, и что не совсем рационально давать доступ к консоли людям, которые об этой консоли никогда не слышали? Тем более если это крупная компания, то хостингом занимаются админы, а наполнением и контентом занимаются совсем другие люди... Именно для этого и делаются всевозможные cms c простыми и понятными интерфейсами. И не путай фронтенд с бэкендом, фронт вполне себе спокойно может генериться за доли секунды...
 

nerezus

Вселенский отказник
vovanium что мешает поставить ограничения в неограниченное состояние и не париться?
 

vovanium

Новичок
nerezus
Капец ты так говоришь, вроде у всех твоих клиентов исключительно свои сервера с неограниченными правами. Хорошо хоть не советуешь написать свой модуль на СИ он же явно быстрее бы работал чем на php...
Если бы было всё так просто и всё решалось простым set_time_limit(0) то тема бы просто не возникла, ты так не считаешь?
 

no_santa

Снегур
1. Товарищи, базар фильтруйте! Вы семечки да стограмм на дискарь покупаете или где?

2. Самое интересное, что актуально. Надо-ли ставить в скрипт дополнительный счетчик времени, или можно получить remained до max_execution_time средствами языка?
 
Сверху