[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Где запустить медленный скрипт?
Gilean
Здравствуйте, я пишу парсер одного сайта. Парсить там надо очень много, поэтому скрипт выполняется очень долго (возможно там работы больше, чем на неделю).

Пока что запускал скрипт с домашней машины на денвере, потому что там можно снять ограничение на время работы скрипта. Но этот вариант меня не устраивает. Также есть площадка в интернете, где сейчас пишется сайт. Но на ней все упирается в ограничение времени на работу скрипта, ведь доступа к настройке max_execution_time нет.

Подскажите, пожалуйста, есть ли какие-нибудь способы запустить скрипт на площадке, чтобы он выполнялся (как cron, например), но не ограничивался по времени выполнения?



Спустя 1 час, 7 минут, 42 секунды (12.10.2010 - 01:47) FatCat написал(а):
Запускашь в браузере. Отпарсил страницу, записал данные и состояние в базу или в файл, и завершился... выдачей в браузер тега мета-рефреша.

Я таким методом пользуюсь для обработки очень больших баз, когда памяти на проход всей таблицы в один цикл не хватает.
if(!isset($_POST['start']))$_POST['start'] = 0;
$rn = 500;
$rz = 0;
$uno_query = $DB->query("SELECT * FROM table WHERE $where LIMIT ".intval($_POST['start']).",".$rn);
while($urow = $DB->fetch_row($uno_query))
{
$rz++;
// Обрабатываем $rn строк
}
if($rz<$rn)
{
echo '<h4 align="center">Выполнено!</h4>';
}
else
{
echo '<h4 align="center"><a href="index.php">Остановить</a>!</h4><br>
<h4 align="center"><a href="index.php?cmd=made_update&start='
.($rz+$_POST['start']).'">Следующие '.$rz.' строк</a>!</h4>
<meta http-equiv="Refresh" Content="10; URL=index.php?cmd=made_update&start='
.($rz+$_POST['start']).'">';
}

Спустя 3 часа, 15 минут, 6 секунд (12.10.2010 - 05:03) arvitaly написал(а):
Цитата
Я таким методом пользуюсь для обработки очень больших баз, когда памяти на проход всей таблицы в один цикл не хватает.

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


Gilean,

Любой недельный прогон можно разделить на части и еще на части.
В итоге у нас хоть 1000 cron-записей с запуском хоть раз в минуту - которые делают все вместе вашу задачу. Есть некоторые моменты с синхронизацией - но это решаемые технические проблемы.

Спустя 4 часа, 15 минут, 19 секунд (12.10.2010 - 09:18) sergeiss написал(а):
Цитата (Gilean @ 12.10.2010 - 01:40)
Но на ней все упирается в ограничение времени на работу скрипта, ведь доступа к настройке max_execution_time нет.

А set_time_limit чем не устраивает?

Спустя 7 минут, 35 секунд (12.10.2010 - 09:25) arvitaly написал(а):
Цитата
А set_time_limit чем не устраивает?


У него нельзя скорее всего

Цитата
set_time_limit() has no effect when PHP is running in безопасный режим. There is no workaround other than turning off safe mode or changing the time limit in the php.ini.

Спустя 13 минут, 2 секунды (12.10.2010 - 09:38) twin написал(а):
Цитата
А set_time_limit чем не устраивает?

На неделю? А как же ребуты?

Спустя 1 час, 23 минуты, 34 секунды (12.10.2010 - 11:02) Basili4 написал(а):
Задачу бить на этапы и в крон.

Спустя 21 минута, 31 секунда (12.10.2010 - 11:24) Gilean написал(а):
Цитата

Цитата
А set_time_limit чем не устраивает?


У него нельзя скорее всего


Да, к сожалению, на хостинге это не прокатывает.

Спустя 15 минут, 44 секунды (12.10.2010 - 11:39) Gilean написал(а):
Цитата
Задачу бить на этапы и в крон.

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

Спустя 9 минут, 41 секунда (12.10.2010 - 11:49) arvitaly написал(а):
Цитата
Вы имеете ввиду бить задачу на этапы до такой степени, чтобы они успевали отрабатывать в кроне, и он не завершался принудительно из-за превышения времени выполнения?


Я бы сказал даже намного меньше чем максимальное время отработки, а вообще вы бы сказали, что делаете - может быть советы бы были поконкретнее

Спустя 15 минут, 52 секунды (12.10.2010 - 12:05) Gilean написал(а):
Мне необходимо распарсить все категории по этой ссылке. Т.е. заходишь в каждую категорию, собираешь информацию с ссылок на сайты (их там по 20 штук на странице, они еще пронумерованы), затем заходишь в каждую подкатегорию, обрабатываешь урлы там, и переходишь в подкатегории подкатегорий. И так до упора.

Пример
Здесь я должен буду взять информацию со страниц, на которые ведут ссылки Facebook, YouTube - Broadcast yourself, The Internet Movie Database и т.д.
Затем перейти в подкатегории в Sub-Categories и сделать тоже самое там.
Related Categories трогать не нужно.

В парсере используется рекурсивная функция, которая принимает категорию, обрабатывает в ней ссылки и запускает саму себя для подкатегорий.

Спустя 7 минут, 42 секунды (12.10.2010 - 12:13) arvitaly написал(а):
Ну в принципе все просто. Получаем список категорий - думаю для этого хватит одного прохода скрипта.
Далее получаем все категории данной категории - сколько успеваем. Следущий запуск - если не успели отработать все категории (для этого где-то стоит флаг) доотрабатываем.

Дальше по аналогии - все все все подкатегории.

Дальше отрабатываем каждую категорию по тому же принципе - есть список всех страниц и количество уже отработанных.

Флаг отработанности естественно ставим после отработки страницы, поэтому даже если скрипт закончится когда страница еще будет на середине загрузки - просто в след запуск она запустится еще раз.

Спустя 23 минуты, 19 секунд (12.10.2010 - 12:36) Gilean написал(а):
Цитата
Ну в принципе все просто. Получаем список категорий - думаю для этого хватит одного прохода скрипта.
Далее получаем все категории данной категории - сколько успеваем. Следущий запуск - если не успели отработать все категории (для этого где-то стоит флаг) доотрабатываем.

Дальше по аналогии - все все все подкатегории.

Дальше отрабатываем каждую категорию по тому же принципе - есть список всех страниц и количество уже отработанных.

Флаг отработанности естественно ставим после отработки страницы, поэтому даже если скрипт закончится когда страница еще будет на середине загрузки - просто в след запуск она запустится еще раз.

Спасибо большое, очень дельный совет. Приму к сведению.
Кстати, основная проблема сайта, с которого идет парсинг - долгий отклик.
ping alexa.com в командной строке говорит о 4 превышениях времени ожидания
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.