Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Ограничение по времени
Форумы портала PHP.SU » » Вопросы новичков » Ограничение по времени

Страниц (2): [1] 2 »
 

1. tuareg - 26 Июня, 2012 - 10:55:18 - перейти к сообщению
Здравствуйте.
Как быть в следующей ситуации.
Есть скрипт, он может выполняться, "очень" долго минуты 2-4. Это нормально, уменьшить время работы не реально. У хостера стоит ограничение в 30 секунд.
Может есть какой-нибудь механизм как это обойти не используя

Типа чтобы он сам себя перезапускал секунд через 20?
2. Zuldek - 26 Июня, 2012 - 10:59:42 - перейти к сообщению
1. Оптимизируйте скрипт (почти всегда можно написать рациональнее)
2. Разбейте задачи и вызывайте их по очереди (1 скрипт либо несколько как вам удобнее и логичнее)
3. Если задача одна и толстая, - выполняйте её по таймлимиту, либо без (но с сохранением следующей на очереди подзадачи) чтобы сделал сколько успеет, а остальное при следующих вызовах.
3. EuGen - 26 Июня, 2012 - 11:04:53 - перейти к сообщению
Чтобы просто перезапускал (если задача этого позволяет) - достаточно register_shutdown_function + system использовать, к примеру.
Или же высчитывать время (если нужно 20 секунд и не хочется аварийным способом вызывать перезапуск) от начала исполнения.
4. tuareg - 26 Июня, 2012 - 11:05:03 - перейти к сообщению
Zuldek пишет:
1. Оптимизируйте скрипт (90% что просто не рационально написан)

Там нечего оптимизировать. Это создание поискового индекса для сайта.
5. Zuldek - 26 Июня, 2012 - 11:08:08 - перейти к сообщению
Тогда дверь номер 3 Подмигивание, разбирать скрипт, считать время от начала исполнения, сохранять операцию каждый шаг для подхвата при следующем вызове.
Или же исполнять операцию вне сервера хостера, а на него потом лить готовый индекс для поиска (если индекс формируется и хранится по аналогии с индексом сфинкса или плагинами зенда для этого дела).
6. tuareg - 26 Июня, 2012 - 11:11:09 - перейти к сообщению
EuGen А можно простой пример? Я просто не понял что значит
EuGen пишет:
+ system
7. Zuldek - 26 Июня, 2012 - 11:12:56 - перейти к сообщению
tuareg пишет:
EuGen А можно простой пример? Я просто не понял что значит
EuGen пишет:
+ system

Не для вашей задачи Улыбка
upd. поторопился, посмотрим, когда её изложат подробнее Улыбка
8. tuareg - 26 Июня, 2012 - 11:15:03 - перейти к сообщению
Как выбирать и сохранять это все ясно. И время 20 секунд, я указал просто так.
Zuldek пишет:
при следующем вызове
Я и спрашиваю как его сделать--- следующий вызов.
Допустим выбрал я 20 записей, сделал с ними что надо. Все и тут мне надо чтобы скрипт перезапустился.
9. EuGen - 26 Июня, 2012 - 11:20:17 - перейти к сообщению
Так а что не получается?
PHP:
скопировать код в буфер обмена
  1. usleep(100);
  2. {
  3.    system('/path/to/php '.__FILE__.' > /dev/null &');
  4. });
  5. //Ваш код
10. tuareg - 26 Июня, 2012 - 11:25:24 - перейти к сообщению
EuGen пишет:
Так а что не получается?

Сейчас все Улыбка . Я Ниндзя .
Спасибо
11. Zuldek - 26 Июня, 2012 - 11:25:27 - перейти к сообщению
tuareg пишет:
Как выбирать и сохранять это все ясно. И время 20 секунд, я указал просто так.
Zuldek пишет:
при следующем вызове
Я и спрашиваю как его сделать--- следующий вызов.
Допустим выбрал я 20 записей, сделал с ними что надо. Все и тут мне надо чтобы скрипт перезапустился.


Не важно что вы там выбрали или записали, ваша задача - сохранить последний шаг операции. Как вы будете этот делать это зависит от задачи и того с чем работает скрипт.
Например, если у меня идут какие-нибудь изменения файлов или создание файлов, то, допустим, каждые 20 секунд я могу писать в базу имя (любой идентификатор) файла и прекращать выполнение. И добавлю проверку на наличие этой записи, чтобы при следующем запуске скрипт работал с файлами, начиная с сохраненного последнего шага.
скрипт можно пинать кроном например.
12. tuareg - 26 Июня, 2012 - 11:29:06 - перейти к сообщению
Zuldek Спасибо, Вам. EuGen уже ответил.
(Добавление)
Еще вопрос, чтобы не создавать новую тему.
PHP:
скопировать код в буфер обмена
  1.  
  2. system('/path/to/php '.__FILE__.' > /dev/null &');
  3.  

Как мне узнать '/path/to/php'
И что значит ' > /dev/null &'
13. EuGen - 26 Июня, 2012 - 12:28:07 - перейти к сообщению
tuareg пишет:
Как мне узнать '/path/to/php'

Так:

tuareg пишет:
И что значит ' > /dev/null &'

- перенаправление вывода "вникуда" (/dev/null - это не настоящее "устройство", а просто заглушка для таких целей), и перевод в фоновый режим (на это указывает амперсанд) - без этого system не вернет управление вызвавшему ее скрипту до тех пор, пока вызываемая при помощи неё команда не будет завершена.
14. tuareg - 26 Июня, 2012 - 12:48:06 - перейти к сообщению
EuGen

А в самом скрипте PHP нельзя узнать?
Просто хотелось бы, просто все сделать Улыбка. Не лазая в настройки хостинга ищи где находится php.
15. fdr21 - 26 Июня, 2012 - 12:49:03 - перейти к сообщению
EuGen
PHP:
скопировать код в буфер обмена
  1. system('/path/to/php '.__FILE__.' > /dev/null &');

можно вопросик!
Что нам это дает, после завершение скрипта, через пару микросекунд, он снова себе же вызовет??? и так будет продолжатся сколько, бесконечно!!?

 

Powered by ExBB FM 1.0 RC1