Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Разбить долгий скрипт на части
цитата
29/08/14 в 10:43
 Mit
Есть php скрипт, который запускается кроном.
Изначально в скрипте в цикле парсятся сайты, что требует много времени и загружает процессор.
Что лучше?
1. вместо цикла поставить редирект на себя-же с get параметрами + sleep на несколько сек., чтобы процессор занимался другими делами.
2. вместо цикла записывать параметры в отдельный файл и при следующем запуске скрипта стартовать с последнего места.
или есть еще способ получше?
цитата
29/08/14 в 10:47
 Alexandur
А в цикле sleep нельзя поставить?
цитата
29/08/14 в 11:28
 Stek
А как скрипт то запускается, через браузер или в консоли ?
цитата
29/08/14 в 11:33
 ibiz
Stek: написано кроном запускается
по уму надо оптимизировать скрипт и вешать отдельный демон процесса под парсинг, процесс сам будет работать в зависимости от загрузки ЦП, что-то типа daemon.io
а еще лучше взять отдельный дешевенький впс за $10 trollface.png
цитата
29/08/14 в 11:39
 Alexandur
ibiz писал:
а еще лучше взять отдельный дешевенький впс за $10

Можно и за 5 trollface.png
цитата
29/08/14 в 12:27
 freeek
долгие скрипты надо из консоли заускать
цитата
29/08/14 в 12:34
 Alexandur
Какая разница?

ignore_user_abort();
set_time_limit(0);
цитата
29/08/14 в 13:11
 Yacc
Mit писал:
вместо цикла записывать параметры в отдельный файл и при следующем запуске скрипта стартовать с последнего места.

Вместо этого лучше писать в очередь сайты/параметры, а в скрипте выбирать из этой очереди один сайт, парсить/грабить и выходить до того как кончится лимит времени.
цитата
29/08/14 в 15:23
 Stek
nice -n 20 /usr/local/bin/php path/to/script.php
понижаем приоритет скрипта до минимума. Еще ulimit есть, там ограничение по процессорному времени. Но не особо в курсе как это работает.
цитата
30/08/14 в 03:41
 Mit
Получается самый простой вариант set_time_limit(0) и sleep в цикле.
И чуть сложней, но более лучший - писать в файл сайты/параметры с последующим запуском в соответствии с этими параметрами.
цитата
30/08/14 в 08:21
 ibiz
Mit писал:
Получается самый простой вариант set_time_limit(0) и sleep в цикле.
И чуть сложней, но более лучший - писать в файл сайты/параметры с последующим запуском в соответствии с этими параметрами.


и при неловких движениях сервер ляжет, ага trollface.png
цитата
30/08/14 в 09:58
 Mit
при неловких движениях сервер ляжет и без этого скрипта trollface.png
цитата
30/08/14 в 10:26
 Ailk
демон это конечно круто, но далеко не каждый в состоянии написать его для необходимых задач. Помойму оптимальный вариант будет предложенный яком, в смысле очереди, и с фиксированным количеством операций в минуту (задается пользователем). К примеру крон запускается раз в минуту(или две, как на многих впс), отрабатывает 5-10-20-... операций с распределенным временем (тот самый слип). Причем можно даже сделать так, чтобы крон запускал задачи отдельными процессами(фиктивная многопоточность), тогда тебе вообще не надо будет следить за временем начала или окончания работы скрипта, но это потребует чуть больше ресурсов памяти.
цитата
22/10/14 в 17:14
 Дартаньян
trollface.png могу накидать твой скрипт на питоне будет меньше жрать.
цитата
22/10/14 в 18:12
 condom007
Кидаешь все задания для парсера в очередь. Где хранится очередь не так принципиально - mysql, redis, gearman, да хоть текстовый файл.

Далее создаёшь скрипт, который запускает N количество воркеров, которые обрабатывают очередь. Начинает тормозить - уменьшаешь количество одновременно работающих воркеров до приемлемого значения.

Также можно разбить задания на несколько очередей, например: очередь со списком URLов для граббинга, очередь с заданиями на парсинг результатов граббинга.

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


Эта страница в полной версии