Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Curl: многопоточность 
V
    Опции темы
SneG0K
Дата 19.2.2011, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Код

    while ($active && ($mrc == CURLM_OK)) {
        if (curl_multi_select($cmh) != -1) {
            do {
                $mrc = curl_multi_exec($cmh, $active);
                $info = curl_multi_info_read($cmh);

                if ($info['msg'] == CURLMSG_DONE) {
                    $ch = $info['handle'];
                    $one_result = $callback(curl_multi_getcontent($ch));

                    curl_multi_remove_handle($cmh, $ch);
                    curl_close($ch);
                }
            } while($mrc == CURLM_CALL_MULTI_PERFORM);
        }
    }

В общем стандартный код. Если вдруг по каким-либо причинам one_result = false
можно ли отправить запрос еще раз? Но только один раз или два.

Добавлено через 3 минуты и 26 секунд
Т.е. могу ли я использовать еще раз $ch?
Просто если я пишу так
Код

                    if (!$one_result) {
                        $one_result = $callback(curl_exec($ch));
                    }

то у меня получается еще меньше результатов, чем было до этого
PM WWW Skype   Вверх
cia
Дата 20.2.2011, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 15.1.2007

Репутация: 4
Всего: 4



Используйте curl_multi_remove_handle, затем curl_multi_add_handle и curl_multi_exec для перезапуска запроса.
PM WWW ICQ   Вверх
SneG0K
Дата 20.2.2011, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



cia, т.е. обработка запроса будет выполнена в этом-же цикле?
PM WWW Skype   Вверх
enoff
Дата 20.2.2011, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



По задаче топика - как-то решилась через повторный вызов curl_multi_exec(), точно уже не помню, но работало это жутко нестабильно, реализовано криво, etc..

а вообще, больная тема...
вобщем, я остановился на мнении, что multiCurl не очень то подходит в качестве решения для "многопоточности".

оговорюсь сразу - объемы - обычно несколько тысяч страниц за один запуск + дальнейшая обработка (с дальнейшим добавлением потоков).

Проблем море.
1. Курл сохраняет куки в файл только после того, как закончит работу, что меня в корне не устраивало, так как "дочерним" потокам нужны куки родителей. Пришлось лепить 
2. Не добавить по человечески потоки не лету.
3. Курл сам по себе жрет много памяти и еще нужно следить за каждой переменной. Подход, из-за которого в большинстве своем у PHP такая "слава", не прокатит. Нужен глаз да глаз. И memory_limit="вся моя оперативка" не спасет, еще один намек на быдлокодинг.
4. На винде работает не совсем так, как хотелось бы. Возможно виной тому ПО заказчика - xp, денвер и curl.dll, скачанная с айфолдера и т.д. Но разбираться со всякими аномалиями нет никакого желания.
etc...

Решил написать набор классов на основе неблокирующих сокетов или потоков, но застопорился на том, что не получалось никак сжатую страницу привести к нормальному виду. Запись в файл и дальнейшее чтение не подходит, а перекодировать на лету - непонятные функции, для которых даже в мане еще не было описания.
Ну так и забросил это дело, времени не хватает. Все не соберусь сесть за это дело.

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

сорри за оффтоп.
PM MAIL ICQ Skype GTalk   Вверх
SneG0K
Дата 20.2.2011, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Мне тоже курл не сильно нравится, но в данном контексте, с данным бюджетом...
PM WWW Skype   Вверх
uzverok
Дата 6.6.2011, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 20.2.2009

Репутация: нет
Всего: нет



Доброго времени суток! Возникла такая же проблема с курлом, не могу добавить динамически потоки, пробовал использовать curl_multi_add_handle и curl_multi_exec после закрытия очередного потока, но он просто игнорирует новые задания, в чем может быть причина?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0577 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.