Использовать ли sleep() в громоздком php-скрипте?

123
[Удален]
#11

Это смотря какие настройки на сервере, у меня дома можно все, макс объемы памяти и процессор грузит только на 50 %. Если бы у меня был рабочий сервер. Я бы так настроил, что он бы даже не дернулся.

iNd
На сайте с 20.03.2009
Offline
122
iNd
#12

дк протестируйте сами. возьмите этот скрипт, наставьте слипов, включайте и смотрите на нагрузку.

но имхо это тупой вариант. set_time_limit не распространяется на sleep() и обычно вроде нагрузка на CPU исчисляется в час(на моем например) так что вам долго придется в слипах сидеть. Но это тоже не вариант, т.к. скрипт будет оперативную память все это время тупо сжирать.

Pavka
На сайте с 20.05.2005
Offline
82
#13
keanor:
нормальный сервер не положит, просто аккаунт тебе заблокируют и все :) Я также считаю что нужно делать все через базу а не через "sleep".

так бы сразу и сказали - через задницу

Подобные вещи делаются скриптом легким скриптом + кроном

Без подписи
[umka]
На сайте с 25.05.2008
Offline
456
#14

Пока скрипт находится в sleep-е, время выполнения не тикает.

Т.е. в системе может может быть жёстко установлен лимит 30 секунд, и при этом ваш скрипт может находиться 10 минут в sleep-е и 1 секунду что-то делать.

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

Лог в помощь!
F
На сайте с 12.03.2007
Offline
85
#15

лучше по крону кусками

Как начать тренироваться (http://max-body.ru/quick_start.html), Бодибилдинг форум (http://fatal-energy.com/). Обменяюсь/куплю ссылками со статей (или статьями) с сайтами бодибилдинг/фитнес тематики.
azov
На сайте с 16.07.2008
Offline
105
#16

Нужно взять и попробовать на конкретном хостинге, я только что у себя проверил - время пребывания в sleep() учитывается как время выполнения скрипта, тоесть входит в 30 разрешенных секунд. Но, интересно, что если эти же 30 секунд установить с помощью функции set_time_limit(30), то тогда время в sleep() не учитывается. Еще если с помощью set_time_limit() не удастся установить необходимое время, то это можно обойти запуская из одного скрипта другой.

Ссылочный аудит недорого: logasters@gmail.com
[umka]
На сайте с 25.05.2008
Offline
456
#17
azov:
Но, интересно, что если эти же 30 секунд установить с помощью функции set_time_limit(30), то тогда время в sleep() не учитывается.

Это уже какие-то премудрости вашего хостинга )

azov:
Еще если с помощью set_time_limit() не удастся установить необходимое время, то это можно обойти запуская из одного скрипта другой.

Вообще, это работать не должно, ибо по прошествии отведенного времени, убивается родительский процесс и все его потомки.

Но даже если такое где-то сработает, то за это могут напинать ))

N
На сайте с 06.05.2007
Offline
419
#18

time_limit в php - общий с учетом всех задержек на уровне php.

вот RLimitCPU, который тоже устанавливают хостеры (в apache RLimitCPU или командой ulimit) - чистое потребленное процессором время.

Также погуглите что такое форк-бомба - все лимиты обходятся.

Кнопка вызова админа ()
S
На сайте с 12.11.2009
Offline
13
#19

ТС, честно, возьмите ВДС и не мучайтесь )

Слава Шевцов
На сайте с 23.07.2005
Offline
370
#20
Pavka:
так бы сразу и сказали - через задницу
Подобные вещи делаются скриптом легким скриптом + кроном

Не всегда. У ТС хорошее решение для некоторых случаев. Например, если у него действительно мощный тяжёлый скрипт, который раз в десять секунд из файла подкачивает лог обновлений со статистикой в базу и агрегирует новые данные с предыдущими значениями. То есть он на основе изменений за последние секунды перестраивает табличные кеши со статистическими данными. Вот тогда время закачки и пересчёта данных в разы меньше времени подсоединения к базе. Более того, время прекомпиляции скрипта может в десять-двадцать раз превышать время выполнения самого скрипта. За эти постоянные компиляции и с хостинга могут пнуть.

Кроме того, иногда в памяти скрипта полезно держать некоторые данные, которые значительно ускоряют процесс, а не запрашивать их при каждой итерации. Например, так хорошо держать данные из справочных таблиц. Я уже молчу про то, что в кроне минимальный интервал запуска - минута. Если нужно обновлять статистику значительно чаще, то крон в качестве рестартёра каждого цикла не выход: нужно по крону постоянно перезапускать скрипт плюс гасить его предварительно из самого же скрипта через exit и, для гарантии, через аварийную скриптобойку вроде set_time_limit (59). Механизм опробован, механизм работает в боевой системе, правда не на шареде 🍻

В общем, не вижу никаких проблем в постановке и решении задачи. Вопрос в том, как её решать имеющимися средствами. VDS всё-таки штука тормозная и если это интернет-магазин, то аренда VDS не выход.

Неизменность точки зрения неизменно порождает иллюзию понимания.
123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий