Реклама на сайте Advertise with us

Разбить долгий скрипт на части

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 09.10.03
Сообщения: 487
Рейтинг: 565

Ссылка на сообщениеДобавлено: 29/08/14 в 10:43       Ответить с цитатойцитата 

Есть php скрипт, который запускается кроном.
Изначально в скрипте в цикле парсятся сайты, что требует много времени и загружает процессор.
Что лучше?
1. вместо цикла поставить редирект на себя-же с get параметрами + sleep на несколько сек., чтобы процессор занимался другими делами.
2. вместо цикла записывать параметры в отдельный файл и при следующем запуске скрипта стартовать с последнего места.
или есть еще способ получше?

1
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 29/08/14 в 10:47       Ответить с цитатойцитата 

А в цикле sleep нельзя поставить?

2
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 29/08/14 в 11:28       Ответить с цитатойцитата 

А как скрипт то запускается, через браузер или в консоли ?

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 29/08/14 в 11:33       Ответить с цитатойцитата 

Stek: написано кроном запускается
по уму надо оптимизировать скрипт и вешать отдельный демон процесса под парсинг, процесс сам будет работать в зависимости от загрузки ЦП, что-то типа daemon.io
а еще лучше взять отдельный дешевенький впс за $10 trollface.png

0
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 29/08/14 в 11:39       Ответить с цитатойцитата 

ibiz писал:
а еще лучше взять отдельный дешевенький впс за $10

Можно и за 5 trollface.png

0
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 29/08/14 в 12:27       Ответить с цитатойцитата 

долгие скрипты надо из консоли заускать

0
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 29/08/14 в 12:34       Ответить с цитатойцитата 

Какая разница?

ignore_user_abort();
set_time_limit(0);

0
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 29/08/14 в 13:11       Ответить с цитатойцитата 

Mit писал:
вместо цикла записывать параметры в отдельный файл и при следующем запуске скрипта стартовать с последнего места.

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

2
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 29/08/14 в 15:23       Ответить с цитатойцитата 

nice -n 20 /usr/local/bin/php path/to/script.php
понижаем приоритет скрипта до минимума. Еще ulimit есть, там ограничение по процессорному времени. Но не особо в курсе как это работает.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

1
 



С нами с 09.10.03
Сообщения: 487
Рейтинг: 565

Ссылка на сообщениеДобавлено: 30/08/14 в 03:41       Ответить с цитатойцитата 

Получается самый простой вариант set_time_limit(0) и sleep в цикле.
И чуть сложней, но более лучший - писать в файл сайты/параметры с последующим запуском в соответствии с этими параметрами.

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 30/08/14 в 08:21       Ответить с цитатойцитата 

Mit писал:
Получается самый простой вариант set_time_limit(0) и sleep в цикле.
И чуть сложней, но более лучший - писать в файл сайты/параметры с последующим запуском в соответствии с этими параметрами.


и при неловких движениях сервер ляжет, ага trollface.png

0
 



С нами с 09.10.03
Сообщения: 487
Рейтинг: 565

Ссылка на сообщениеДобавлено: 30/08/14 в 09:58       Ответить с цитатойцитата 

при неловких движениях сервер ляжет и без этого скрипта trollface.png

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4688
Рейтинг: 727

Ссылка на сообщениеДобавлено: 30/08/14 в 10:26       Ответить с цитатойцитата 

демон это конечно круто, но далеко не каждый в состоянии написать его для необходимых задач. Помойму оптимальный вариант будет предложенный яком, в смысле очереди, и с фиксированным количеством операций в минуту (задается пользователем). К примеру крон запускается раз в минуту(или две, как на многих впс), отрабатывает 5-10-20-... операций с распределенным временем (тот самый слип). Причем можно даже сделать так, чтобы крон запускал задачи отдельными процессами(фиктивная многопоточность), тогда тебе вообще не надо будет следить за временем начала или окончания работы скрипта, но это потребует чуть больше ресурсов памяти.

0
 
+ +
WP-Master

С нами с 17.01.13
Сообщения: 1922
Рейтинг: 1123


Передовик Master-X (16.02.2015) Передовик Master-X (01.03.2015)
Ссылка на сообщениеДобавлено: 22/10/14 в 17:14       Ответить с цитатойцитата 

trollface.png могу накидать твой скрипт на питоне будет меньше жрать.

0
 



С нами с 30.04.04
Сообщения: 602
Рейтинг: 293

Ссылка на сообщениеДобавлено: 22/10/14 в 18:12       Ответить с цитатойцитата 

Кидаешь все задания для парсера в очередь. Где хранится очередь не так принципиально - mysql, redis, gearman, да хоть текстовый файл.

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

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

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

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »