callback функция для curl

Статус
В этой теме нельзя размещать новые ответы.
Или там вобще синтаксис не тот ?
Совершенно другой.
если ты глянешь код курловый либы у пыхи то ты увидишь там просто врапер к ЛИБКУРЛУ (интерфейс), поэтому в случае с КУРЛОМ мультипоточность ПЫХИ не имеет никакого отношения.
Я это знаю.
Если надо просто на винт положить 10 000 урлов - вопросов нет.
А теперь объясни мне смысл многопоточной загрузки стопки документов, если обрабатываться они будут всё равно в один поток.
 
Ну, х.з. я вобще в программировании не спец. Просто например в Actionscript (Flash) есть такое понятие как обработка событий .. Очень удобная штука ) Ну, не буду о примерах, но думаю что ты понял о чем я ...
Ну я то не то что-бы мазохист, просто считал что питон с perl имеют что-то общее?! Вернее питон как-то от перла унаследовался или что-то такое ...
Или там вобще синтаксис не тот ?
таких событий как в Экшнскрипте в пыхе нету )) чаще всего они эмулируются, и случай с курлом это как раз такой пример. принцип я уже описал очередь с курловыми потоками постоянно дрючится на наличае оконченных потоков и если находится оконченный поток - то он передается функции которую ты назначил. пока все попотоки не остановятся делать что то далее ты не можешь, т.е. скрипт весит и на другие "события" ему похх )

Добавлено через 14 минут
Совершенно другой.
Я это знаю.
Если надо просто на винт положить 10 000 урлов - вопросов нет.
А теперь объясни мне смысл многопоточной загрузки стопки документов, если обрабатываться они будут всё равно в один поток.
смысл в том что на скачивание уходит на много больше времени нежели чем на запись, поэтому одного потока пишущего на диск обычно хватает чтобы обслуживать до Н и более потоков курлов ) и для большинства задач людям этого хватает выше крыши. поэтому скорее всего он упрется в СЕТЬ, а не в хард ) и если даже все-же случится второе (что не редкость на широких каналах и граммотно построенном софте), то увлечение потоков записи на ХАРД ниче не изменит - ибо упрется все в ленейную скорость записи на винт или рэйд, которую ты не сможешь преодолеть увелечением кол-ва потокв пишущих на диск, и решения тут уже будут иные, и софт крутой ))) судя по посту ТС у него все на много проще, так зачем мудрить если то что есть должно хватить с полна
 
Да хотя бы чтоб избежать
пока все попотоки не остановятся делать что то далее ты не можешь, т.е. скрипт весит и на другие "события" ему похх )

Наверное я слишком критичен :D
 
Да хотя бы чтоб избежать
Наверное я слишком критичен :D
ну ты эстет, а в свободно время ты что будешь делать? sleep(3); и чекать не закончилось ли качать? вобщем это из серии а вот если бы у бабушки был бы х... то она была бы дедушкой, т.е. я к тому что такой задачи тут не было и в целом это никогад не нужно. и если она всеже есть то у пыхи есть потоки - Посиксовые, есть симафоры для локов потоков и шаред мем, для обмена инфой между потоками - классический набор инструментов, для написания мультипоточного софта под линуксом - причем если учесть что все это написано в виде враперов к системным вызовам, то говорить о их нелепой реализации неприходится. но чаще всего пишется скрипт который чисто качает и сейвит и пускается в бэкграунд и пишется другой который делает все остальное, это нормальная практика которая сильно упрощает жизнь - отлаживать мультипоточный софт это очень большой гимор. причем неважно на чем он написан.
 
Может я и эстет.
Нет, я точно эстет.
Но я не представляю себе как написать на PHP тулзу для нагрузочного тестирования да ещё и с выводом данных в риалтайме.

Посиксовские потоки в PHP - это как раз то, что я имел в виду говоря о зачаточном состоянии многопоточности. Эти несколько куцых функций и близко нельзя сравнивать с питоновскими либами ни во функционалу ни по удобству использованияs Да и переносимость хромает.

В одном соглашусь - мы отклонились от темы.
 
Ребята, спасибо Вам за участие и обсуждение в этом топике, но меня вообще интересует производительность, что ли ?! )
То есть, есть например что-то вроде:
PHP:
foreach ($site as $s =>$k) {
 foreach ($keyword as $sk => $sv) {
  switch ($sv) {
   // всякие штуки, причем в каждом case идет цикл for(который каждый раз вызывает getContent и все $url записывает в массив)
  } 
 // ну а тут уже все $url из массива в цикле while (count($array) > 0) обрабатываются функцией которая все сохраняет ...
  } 
}
То есть, все очень медленно работает ... Хочется как-то ускорить работу ... А то получается около 20К страниц в сутки ...
 
Тебе уже ответили - или multi_curl в PHP или ЯП с поддержкой многопоточности.
Особые извращенцы умудряются что-то делать с pcntl_*, но я не рискую.
 
Ребята, спасибо Вам за участие и обсуждение в этом топике, но меня вообще интересует производительность, что ли ?! )
То есть, есть например что-то вроде:
PHP:
foreach ($site as $s =>$k) {
 foreach ($keyword as $sk => $sv) {
  switch ($sv) {
   // всякие штуки, причем в каждом case идет цикл for(который каждый раз вызывает getContent и все $url записывает в массив)
  } 
 // ну а тут уже все $url из массива в цикле while (count($array) > 0) обрабатываются функцией которая все сохраняет ...
  } 
}
То есть, все очень медленно работает ... Хочется как-то ускорить работу ... А то получается около 20К страниц в сутки ...
если ты хочешь побыстрее то тебя определенно интересует производительность. в общем чтоб тебе проще было бы заюзай эту либу Для просмотра ссылки Войди или Зарегистрируйся

тогда ты у себя сможешь в коде сделать вот такую вещь:
PHP:
<?php
include_once '../MultiCurl.class.php';

class MyMultiCurl extends MultiCurl {
    protected function onLoad($url, $content, $info) {
        print "[$url] $content ";
        print_r($info);
    }
}

try {
    $mc = new MyMultiCurl();
    $mc->setMaxSessions(2); // limit 2 parallel sessions (by default 10)
    $mc->setMaxSize(10240); // limit 10 Kb per session (by default 10 Mb)
    $mc->addUrl('http://google.com');
    $mc->addUrl('http://yahoo.com');
    $mc->addUrl('http://altavista.com');
    $mc->wait();
} catch (Exception $e) {
    die($e->getMessage());
}
?>
думаю тут то все ясно?

Добавлено через 32 минуты
Может я и эстет.
Нет, я точно эстет.
Но я не представляю себе как написать на PHP тулзу для нагрузочного тестирования да ещё и с выводом данных в риалтайме.
потоки создает курл - как только очередной поток прекращает свою работу т.е. скачал страничку, у тебя останавливается код - причем курл все также продолжает качать, если что то осталось в очереди - ты пересчитываешь нужные тебе СТАТ данные и перерисовываешь их на экране, пишешь их в файл или в БД куда тебе нужно, для чего тут нужен отдельный ТРЭД если после каждого эвента у тебя останов мне реально не понятно. всю стату о конекте время, резолв, скачивание тебе все это также вернет сама курл либа поэтому погрешностей в расчетах не будет а если и есть то коррекцию никто не отменял.

насчет ПЦНТЛ- это банальная лень, пишешь обертку вокруг него, и юзается оно на подобии того как оно есть в питоне - если тебе так удобнее.

насчет отхода от топика - речь идет о производительности, автор жалуется что медленно у него там ))) поэтому невижу никакого офтопа
 
насчет ПЦНТЛ- это банальная лень, пишешь обертку вокруг него, и юзается оно на подобии того как оно есть в питоне - если тебе так удобнее.
Ошибаешься.
Не вижу смысла писать что-то только для POSIX-систем, когда можно решить задачу не изобретая ненужного велосипеда.
Хочется тебе заниматься мудистикой (писать врапперы и дебажить их) - дело твоё. Я уж лучше воспользуюсь вылизанными питоновскими либами, и мой код будет одинаково работать и под никсами и под виндой.

потоки создает курл - как только очередной поток прекращает свою работу т.е. скачал страничку, у тебя останавливается код - причем курл все также продолжает качать, если что то осталось в очереди - ты пересчитываешь нужные тебе СТАТ данные и перерисовываешь их на экране, пишешь их в файл или в БД куда тебе нужно, для чего тут нужен отдельный ТРЭД если после каждого эвента у тебя останов мне реально не понятно. всю стату о конекте время, резолв, скачивание тебе все это также вернет сама курл либа поэтому погрешностей в расчетах не будет а если и есть то коррекцию никто не отменял.
Всё написанное было бы верно, если бы мне нужно было грузить от одного юзера.
Но такое тестирование никому не интересно.
Пример - надо сэмулировать 100 непрерывных online-юзеров в течение 30 минут.
Для этого я беру список урлов (не только документов, но и картинки, js, css, архивы и т.д.) и запускаю 100 ботов (потоков) по нему.
Каждый бот ведёт свою стату, умеет парсить ответ на нахождение заданного признака, может не только тянуть данные, но и заливать, умеет работать с SOAP (и всё это элементарно настраивается и может выполняться одновременно). А ведь для каждого бота список урлов можно и перемешать, для чистоты эксперимента.
Ты знаешь простой способ сделать это на PHP? Я - не знаю.
На питоне большая часть вышеперечисленного делается кодом в полэкрана.
 
имхо, все зависит от задач и привычки. питон хорош, кто спорит, но кодя ежедневно не одну сотню строк php, задумываешься, может не стоит засирать мозг чужеродным синтаксисом и можно решить задачу привычными средствами?
Вот PHP_Master говорит -
> Пример - надо сэмулировать 100 непрерывных online-юзеров в течение 30 минут.
curl_multi в умелых руках показывает себя преотлично, код раза в 1,5-2 объемней питона неспорю, но с затачей справиться на ять. Инициируем опции в цикле, запускаем и тут уже треды живут своей жизнью. Для полноты эксперимента подключаем proxy листик и вот нам полноценная эмуляция.
Собираем данные в обычном режиме.

а пассаж про - не только документов, не только тянуть - не совсем понятен. это все есстественно или я отстал от жизни и питон уже имеет свой JSдвижок для обработки сложных скриптов? ну тады молчу... иначе - хрень редьки не слаще
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху