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

12 3
O2
На сайте с 02.11.2009
Offline
50
4503

Я не силён в администрировании серверов. Вот размышляю над такой ситуацией.

Знаю, что на шаред-хостингах обычно ставят временное ограничение на работу скрипта, чтобы какой-нибудь багописец не уложил весь сервер бесконечным циклом. Но указывать такие технические мелочи хостеры считают излишним. Какой и у кого именно предел - хз.

Предположим, у меня 1 раз в сутки запускается какой-то очень массивный PHP-скрипт (ну, например, статистику считает, неважно). Скорость его работы для меня не критична - пусть хоть час ковыряется. Поэтому я, дабы не наглеть и не укладывать своим скриптом весь сервак, хочу вставлять периодически в цикл sleep(). Ну например открутил 1000 повторов - заснул на несколько секунд, дал серваку вздохнуть, потом всё по-новой.

Но тогда растет общее время работы скрипта... его ж система кильнет :) Не выйдет ли мне боком такое джентельменство?

BrokenBrake
На сайте с 03.03.2007
Offline
194
#1
ody256:
Но указывать такие технические мелочи хостеры считают излишним. Какой и у кого именно предел - хз.

Обычно 30 секунд.

Мне вот непонятно, зачем вам sleep? Делайте очереди заданий, чтобы скрипт успевал выполнять часть работы за отведённое время и запускайте его раз в 5 минут, например.

S
На сайте с 28.10.2005
Offline
305
#2

Вроде бы sleep не считается в общем времени выполнения скрипта

Лучше дробите вашу задачу на более мелкие и вызывайте крон почаще

O2
На сайте с 02.11.2009
Offline
50
#3
BrokenBrake:
Мне вот непонятно, зачем вам sleep? Делайте очереди заданий, чтобы скрипт успевал выполнять часть работы за отведённое время и запускайте его раз в 5 минут, например.

Тупо проще :)

Z
На сайте с 13.03.2009
Offline
81
#4
Обычно 30 секунд.

можно написать в срипте

set_time_limit(0);

и он будет без ограничения работать(ну если хостер ограничения не ввел(чаще всего ограничения есть на фришках на платных такое встречаеться редко))

O2
На сайте с 02.11.2009
Offline
50
#5
zifanchuck:
можно написать в срипте set_time_limit(0);

По совпадению вот только сегодня один товарищ рассказал мне этот вариант.

Прикольно, конечно, но как-то странно... слишком просто.

Это как если бы можно было прописать set_drive_space_limit(0) и юзать на шаред-хостинге все винты в дата-центре :)

M
На сайте с 21.11.2005
Offline
98
msv
#6

Нормальный выход всего один - купить VDS ;)

Умный кросспостинг (http://www.pistonposter.com/) в 14 социалок.
O2
На сайте с 02.11.2009
Offline
50
#7

msv, на самом деле, я проблему из этого не делаю и каких-то особых выходов не ищу.

Просто было интересно теоретически ситуацию рассмотреть.

[Удален]
#8

А зачем тебе sleep? поставь цикл for, пусть переодически вместо того, что бы выполнять работу просто переберает значения по кругу пару часиков, потом продолжаешь. Эфект тот же будет.

По поводу set_time_limit действительно должно работать. И мне в основном встречались хостеры которые это разрешают. Можешь написать в поддержку и спросить их по этому поводу.

Сомневаюсь, что это нельзя делать.

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

Если даже тайм лимит не разрешен. То можно все пошагово через базу данных делать. В начале работы вытаскиваешь из базы параметр, в конце работы записываешь его в базу и делаешь такой скрипт, что бы он объязательно успевал выполниться за отведенное время.

Блин, ты с помощью php сервер не сможешь положить. Это надо стараться. Там стоит ограничение по оперативной памяти и по времени выполнения. Если твой скрипт успевает выполниться за 30 секунд, то никакой нагрузки он не несет. Пусть выполняеться. Какое джентельменство. Другое с помощью базы даннных. Если она внушительна, то сервер положить можно. Такое впечатление, что ты не знаешь, что хочешь спросить.)) Зачем я тогда отвечаю спрашиваеться??.....

Jekyll
На сайте с 04.05.2009
Offline
136
#9
closeyoureyes:
А зачем тебе sleep? поставь цикл for, пусть переодически вместо того, что бы выполнять работу просто переберает значения по кругу пару часиков, потом продолжаешь. Эфект тот же будет.

Да вы шо)) Затестите скрипт

while (true) { };

Ну ни хрена же он не делает? А сервер на 30 секунд положит :)

K
На сайте с 08.12.2009
Offline
7
#10
Jekyll:
Да вы шо)) Затестите скрипт
while (true) { };
Ну ни хрена же он не делает? А сервер на 30 секунд положит :)

нормальный сервер не положит, просто аккаунт тебе заблокируют и все :) Я также считаю что нужно делать все через базу а не через "sleep".

Нет ничего невозможного.
12 3

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