С нами с 09.10.03
Сообщения: 494
Рейтинг: 592
|
Добавлено: 29/08/14 в 10:43 |
Есть php скрипт, который запускается кроном.
Изначально в скрипте в цикле парсятся сайты, что требует много времени и загружает процессор.
Что лучше?
1. вместо цикла поставить редирект на себя-же с get параметрами + sleep на несколько сек., чтобы процессор занимался другими делами.
2. вместо цикла записывать параметры в отдельный файл и при следующем запуске скрипта стартовать с последнего места.
или есть еще способ получше?
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 29/08/14 в 10:47 |
А в цикле sleep нельзя поставить?
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 29/08/14 в 11:28 |
А как скрипт то запускается, через браузер или в консоли ?
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
0
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 29/08/14 в 11:33 |
Stek: написано кроном запускается
по уму надо оптимизировать скрипт и вешать отдельный демон процесса под парсинг, процесс сам будет работать в зависимости от загрузки ЦП, что-то типа daemon.io
а еще лучше взять отдельный дешевенький впс за $10
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 29/08/14 в 11:39 |
ibiz писал: | а еще лучше взять отдельный дешевенький впс за $10 |
Можно и за 5
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 29/08/14 в 12:27 |
долгие скрипты надо из консоли заускать
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 29/08/14 в 12:34 |
Какая разница?
ignore_user_abort();
set_time_limit(0);
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 29/08/14 в 13:11 |
Mit писал: | вместо цикла записывать параметры в отдельный файл и при следующем запуске скрипта стартовать с последнего места. |
Вместо этого лучше писать в очередь сайты/параметры, а в скрипте выбирать из этой очереди один сайт, парсить/грабить и выходить до того как кончится лимит времени.
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 29/08/14 в 15:23 |
nice -n 20 /usr/local/bin/php path/to/script.php
понижаем приоритет скрипта до минимума. Еще ulimit есть, там ограничение по процессорному времени. Но не особо в курсе как это работает.
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
1
|
|
|
С нами с 09.10.03
Сообщения: 494
Рейтинг: 592
|
Добавлено: 30/08/14 в 03:41 |
Получается самый простой вариант set_time_limit(0) и sleep в цикле.
И чуть сложней, но более лучший - писать в файл сайты/параметры с последующим запуском в соответствии с этими параметрами.
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 30/08/14 в 08:21 |
Mit писал: | Получается самый простой вариант set_time_limit(0) и sleep в цикле.
И чуть сложней, но более лучший - писать в файл сайты/параметры с последующим запуском в соответствии с этими параметрами. |
и при неловких движениях сервер ляжет, ага
|
|
|
|
С нами с 09.10.03
Сообщения: 494
Рейтинг: 592
|
Добавлено: 30/08/14 в 09:58 |
при неловких движениях сервер ляжет и без этого скрипта
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 30/08/14 в 10:26 |
демон это конечно круто, но далеко не каждый в состоянии написать его для необходимых задач. Помойму оптимальный вариант будет предложенный яком, в смысле очереди, и с фиксированным количеством операций в минуту (задается пользователем). К примеру крон запускается раз в минуту(или две, как на многих впс), отрабатывает 5-10-20-... операций с распределенным временем (тот самый слип). Причем можно даже сделать так, чтобы крон запускал задачи отдельными процессами(фиктивная многопоточность), тогда тебе вообще не надо будет следить за временем начала или окончания работы скрипта, но это потребует чуть больше ресурсов памяти.
|
|
|
|
+ +
WP-Master
С нами с 17.01.13
Сообщения: 1922
Рейтинг: 1123
|
Добавлено: 22/10/14 в 17:14 |
могу накидать твой скрипт на питоне будет меньше жрать.
|
|
|
|
С нами с 30.04.04
Сообщения: 602
Рейтинг: 293
|
Добавлено: 22/10/14 в 18:12 |
Кидаешь все задания для парсера в очередь. Где хранится очередь не так принципиально - mysql, redis, gearman, да хоть текстовый файл.
Далее создаёшь скрипт, который запускает N количество воркеров, которые обрабатывают очередь. Начинает тормозить - уменьшаешь количество одновременно работающих воркеров до приемлемого значения.
Также можно разбить задания на несколько очередей, например: очередь со списком URLов для граббинга, очередь с заданиями на парсинг результатов граббинга.
При такой архитектуре ты сможешь четко управлять процессом, регулируя количество воркеров и нагрузку и сможешь бесконечно увеличивать количество машин, на которых запускаются воркеры.
|
|
|
|