Параллельное выполнение . PHP

12
KA
На сайте с 03.01.2007
Offline
137
2644

Добрый день

:cool:Столкнулся с такой проблемой

Задача: параллельно открыть и обработать содержимое N страниц

Что реализовал:

main.php - скрипт открывает N iframe obrabotka.php в каждый из которых передает различные параметры

obrabotka.php - скрипт обрабатывает содержимое одной страницы (через fsockopen)

Максимальное время обработки obrabotka.php - 2 минуты

Среднее время обработки 1 страницы примерно 30сек

если обрабатывать 1000 страниц - около часа и более занимает

Моя реализация неправильная =(

Помогите реализовать параллелизм выполнения

Чтобы параллельно вызывалось N скриптов obrabotka.php с разными параметрами

....Заранее Спасибо
Интернет магазин оптических приборов (http://oz.com.ua) в Украине - бинокли, микроскопы, телескопы.
[Удален]
#1

могу посоветовать только написать небольшую прогу на Delphi, которая и реализует параллелизм

KA
На сайте с 03.01.2007
Offline
137
#2

Нужно именно на php )

Я умею параллелить на Ada,C,Java =)

N
На сайте с 06.05.2007
Offline
419
#3

для параллельного скачивания есть curl_multi

для параллельного выполнения на php тоже найдутся варианты, но это слабая сторона php. мало чего найдете.

Кнопка вызова админа ()
malls
На сайте с 08.08.2005
Offline
255
#4
netwind:
для параллельного скачивания есть curl_multi
для параллельного выполнения на php тоже найдутся варианты, но это слабая сторона php. мало чего найдете.

поскольку главная проблема как я понимаю - это именно загрузка - то curl_multi проблему решит на раз - т.к. дальнейшая обработка это уже реально быстро...

wdsg
На сайте с 09.02.2009
Offline
31
#5

Приходилось решать задачи на PHP, требующие многопоточности. Вариант с запуском множества копий скрипта во фреймах отпал сразу. Вообще, дёргать веб-сервер, в данном случае, не стоит. Мне кажется, что самый оптимальный подход - запускать потоки вот так:


$Streams = 10; // Число потоков
for ($i=1; $i<=$Streams; $i++) {
system ('php script.php [параметры]');
}

Если у нас имеется некий список URL страниц для обработки, перед запуском делим его на число потоков, и, в параметрах, передаём каждому потоку, какую часть списка ему обрабатывать. Оптимальное число потоков определяем экспериментально.

Проектирование и разработка сложных IT-систем. Вожусь с проблемными задачами.
[Удален]
#6

Попробуйте например это

L
На сайте с 22.12.2008
Offline
23
#7
Оптимальное число потоков определяем экспериментально.

и каким образом?

Тиц на выдачу не влияет. Он влияет на размер живота.
wdsg
На сайте с 09.02.2009
Offline
31
#8

letsgo, самый неправильный, но простой вариант, смотрим на процессы php в top. В идеале, необходимо дробится такого числа потоков, при котором все запущенные процессы php имеют %CPU. Очень грубый вариант, но, как ни странно, рабочий способ.

NL
На сайте с 01.09.2008
Offline
54
#9
KOSMOS aka Anarion:
Добрый день
😎Столкнулся с такой проблемой

Задача: параллельно открыть и обработать содержимое N страниц

Что реализовал:
main.php - скрипт открывает N iframe obrabotka.php в каждый из которых передает различные параметры
obrabotka.php - скрипт обрабатывает содержимое одной страницы (через fsockopen)
Максимальное время обработки obrabotka.php - 2 минуты
Среднее время обработки 1 страницы примерно 30сек

если обрабатывать 1000 страниц - около часа и более занимает
Моя реализация неправильная =(

Помогите реализовать параллелизм выполнения
Чтобы параллельно вызывалось N скриптов obrabotka.php с разными параметрами

....Заранее Спасибо

Мы аналогичную систему парсинга на pcntl_fork реализовывали. Не очень удобно, но работает.

Куплю ссылки и статьи. В ЛС
[Удален]
#10

В php мультипоточности прямой нет, есть только псевдо ито она реализована через всем известное место.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий