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

Php: несколько параллельных закачек

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

НЕ ЗАНИМАЮСь ФИНАНСАМИ!

С нами с 16.03.03
Сообщения: 1251
Рейтинг: 653

Ссылка на сообщениеДобавлено: 25/11/07 в 20:50       Ответить с цитатойцитата 

задача:
есть нескольк урлов которые надо скачать
для ускорения хочется эти процессы запустить параллельно
как на Php такое реализуется?

SubmitPornBlog

0
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 25/11/07 в 21:45       Ответить с цитатойцитата 

curl_multi_*
ежели не просто скачать, а еще много чего наделать, то запускать параллеьно Н-процессов.

4
 



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

Ссылка на сообщениеДобавлено: 25/11/07 в 22:35       Ответить с цитатойцитата 

Вариантов несколько:
Запускать несколько копий скрипта icon_smile.gif (метод в лоб)
мульти курл - оптимально со сложностью и производительностью
не блокирующие сокеты - разбираться жозенько, производительность выигрывает
Каждый выбирает свое icon_smile.gif

0
 



С нами с 08.04.07
Сообщения: 30
Рейтинг: 5

Ссылка на сообщениеДобавлено: 25/11/07 в 22:38       Ответить с цитатойцитата 

Путь новобранца

0
 



С нами с 08.04.07
Сообщения: 30
Рейтинг: 5

Ссылка на сообщениеДобавлено: 25/11/07 в 22:40       Ответить с цитатойцитата 

proc3nt писал:

не блокирующие сокеты - разбираться жозенько, производительность выигрывает
Каждый выбирает свое icon_smile.gif

Но при кривых руках тачка дохнет ;)

Путь новобранца

0
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 26/11/07 в 01:50       Ответить с цитатойцитата 

HardKenny писал:
http://dyuss.od.ua/2007/07/06/mnogopotochnost-v-php/

Метод дергать аяксом несколько копий скрипта подходит для очень узкого круга задач.
Более коректно будет делать один запрос на сервер, по которому запустится диспетчер и породит несколько потоков обработки с требуемыми параметрами, дождется окончания их выполнения, обработает результат и куда-то сохранит или что-то сделает. Никто не мешает делать и промежуточную статсу состояния процесса. И вот уже эту "статсу" стоит тянуть аяксом, раз в н-сек - плюса минимально три - для запуска скрипта не нужно перегружать страницу, для обновления статистики перегруз не нужен, и самый приятный в некоторых моментах - открыв страницу в другом браузере и даже на другом компе - вы все так же будете видеть процесс работы в "реалтайме" icon_smile.gif

0
 

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 ()
Ссылка на сообщениеДобавлено: 26/11/07 в 03:43       Ответить с цитатойцитата 

как и сказали, мультикурл или отдельно вызывать через exec (system) программу для скачивания , к примеру wget

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

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 26/11/07 в 05:19       Ответить с цитатойцитата 

неблокирующие сокеты + селект форева smail49.gif

0
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 26/11/07 в 12:43       Ответить с цитатойцитата 

Pentarh писал:

неблокирующие сокеты + селект форева smail49.gif

Оффтопик: бро, какой у тебя был бы размер счастья, если бы на пыхе можно было асмовые инструкции писать? ;) не тот это язык и системно правильные подходы к сожалению или тормозят или сбойны

0
 

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 ()
Ссылка на сообщениеДобавлено: 26/11/07 в 14:18       Ответить с цитатойцитата 

php - это для создания страниц вообще то, а не для полноценных приложений icon_smile.gif

Поэтому правильнее в данном случае запустить 10 wget через system , чем самому сидеть и долго дебагить скрипт под задачу, которая для php не предназначена.

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

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 26/11/07 в 15:41       Ответить с цитатойцитата 

Ну в частности, если стоит задача, например, мультифида, то счет идет на милисекунды и каждая оная здесь дорогА. Таймаут тоже очень важен, иначе одна закачка тормознет все остальные.

Чес говоря, такие задачи гораздо удобнее на перле писать.

Если запустить в бекграунд вгеты, ты не можешь их контролировать. К тому же это 10 форков считай.

Писать форканутое приложение - это заморачиваться с IPC.

А так открыл 10 неблокирующих сокетов, послал всем коннект, и поехали
while ($socket_num <= 10) {
if (select(...)) { //сокет готов?
fgets(..); //читаем
}
// следующий
}

(довольно примитивно, но понятно)
1. Нет заморочек и побочек с форками
2. Нет заморочек с IPC
3. Все сокеты под абсолютным контролем и программу ни на милисекунду не блокируют и могу быть закрыты в любом состоянии.

0
 

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 ()
Ссылка на сообщениеДобавлено: 26/11/07 в 15:57       Ответить с цитатойцитата 

Вот к этому и идет, что изначально все от сути задачи зависит.

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

0
 



С нами с 16.11.07
Сообщения: 9

Ссылка на сообщениеДобавлено: 03/12/07 в 11:19       Ответить с цитатойцитата 

в CURL можно установить многопоточность
"Загрузка в несколько потоков с multi_curl и PHP"
http://php.southpark.com.ua/2007/zagruzka-v-neskolko-potokov-s-multi_curl-i-php/

Последний раз редактировалось: zavul0n (04/12/07 в 19:57), всего редактировалось 1 раз

0
 



С нами с 16.04.05
Сообщения: 754
Рейтинг: 352

Ссылка на сообщениеДобавлено: 04/12/07 в 05:37       Ответить с цитатойцитата 

Я за сокеты (решение Пентарха), имхо это самое правильное. Думается что курлом будет медленне + памяти больше скушается. А код от применения курла в данном случае меньше не станет (может и больше станет)

Мой блог: seo blog

0
 



С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950


Передовик Master-X (01.01.2008)
Ссылка на сообщениеДобавлено: 04/12/07 в 13:54       Ответить с цитатойцитата 


Бабушка на двое сказала.
Имейте ввиду, что нужно будет самому код формирования/разбора протокола HTTP писать.

0
 



С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950


Передовик Master-X (01.01.2008)
Ссылка на сообщениеДобавлено: 04/12/07 в 13:58       Ответить с цитатойцитата 

HardKenny писал:
Но при кривых руках тачка дохнет ;)

Это у тех кто боится функции select

0
 



С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950


Передовик Master-X (01.01.2008)
Ссылка на сообщениеДобавлено: 04/12/07 в 14:01       Ответить с цитатойцитата 

Pentarh писал:
while ($socket_num <= 10) {
if (select(...)) { //сокет готов?
fgets(..); //читаем
}
// следующий
}

Меня интересует строчка
Код:
// следующий

Там что дальше селекты на другие сокеты? Вот тут тачка и сдохнет.

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 04/12/07 в 14:41       Ответить с цитатойцитата 

нет, там конец цикла и всякие проверки.

0
 



С нами с 16.04.05
Сообщения: 754
Рейтинг: 352

Ссылка на сообщениеДобавлено: 04/12/07 в 20:36       Ответить с цитатойцитата 



Если не сложно, кинь пример мульти-сокетового гета (php код) я заценю как ты это делаешь, может поучусь. У меня в общем - то есть работающий пример, есть то что я писал сам - сравню.

Только плиз законченое творение, допустим дёргающее список урлов из массива $urls

Мой блог: seo blog

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 04/12/07 в 20:43       Ответить с цитатойцитата 

у меня на перле. я писал с примера на пхп
http://pentarh.com/multi-example.txt

0
 



С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950


Передовик Master-X (01.01.2008)
Ссылка на сообщениеДобавлено: 04/12/07 в 22:04       Ответить с цитатойцитата 


Стиль "изложения" мне понравился. smail100.gif
Благодаря usleep у тя машина не совсем дохнет. Тем не менее процессор занят намного больше чем надо при слабом трафе.
Я-бы использовал select на полную эффективность. А именно грузил-бы полный вектор в фунцкию и timeout в select ставил бы на остаток времени. Тем самым usleep нафиг был бы не нужен.

0
 



С нами с 16.04.05
Сообщения: 754
Рейтинг: 352

Ссылка на сообщениеДобавлено: 05/12/07 в 03:08       Ответить с цитатойцитата 

э... а где тот php с которого ты писал? icon_smile.gif

Мой блог: seo blog

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 05/12/07 в 18:24       Ответить с цитатойцитата 

где то в гугле или яндексе по запросам асинхронные/неблокирующие сокеты php

0
 



С нами с 16.04.05
Сообщения: 754
Рейтинг: 352

Ссылка на сообщениеДобавлено: 09/12/07 в 01:05       Ответить с цитатойцитата 

написал счас простенький пример по мануалу (нормальных примеров не на гуглил).

Такой вопрос: когда включаю нонблокинг - бывает что некоторые сокеты, сразу после того как в них записал выдаются селектом как готовные к чтению, читаю - а там пусто.

Ну я их соответственно закрываю, так ничего не получив.. (это фигово). Как отследить другими способами что сокет можно уже закрывать (по окончанию текста как - то ненадёжно получается)?

Мой блог: seo blog

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 09/12/07 в 01:30       Ответить с цитатойцитата 

1. открываем массив сокетов
2. проходим по массиву
- если не писали еще в сокет, засылаем туда запрос (на этом этапе селект надо делать на write а не на read)
- если писали, делаем селект на read и читаем
- если при чтении поймали eof, закрываем сокет

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

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


Перейти:  



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

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

Опросы

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



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