Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > LWP работа через прокси


Автор: burakov 16.12.2011, 20:43
Добрый день
подключаю прокси
вот так

$lwp -> proxy ('http', 'http://127.0.0.1:8080'); #подставляются разные внешние прокси

меняю адрес прокси перед каждым запросом GET
по некоторым всем понятным причинам smile (грабер)

при этом 
вытормаживает так,
что машинка
3000 Мгц 512 ОЗУ 
тянет только одну копию грабера (4потока)

Вопрос.
почему так жрет ресурсы?
может можно как то оптимизировать установку этого прокси?
но условия такие же - менять на каждом GET запросе 

у кого есть опыт... помогите.

Автор: Pfailed 16.12.2011, 21:00
Что такое "вытормаживает"?  smile 

Автор: burakov 16.12.2011, 21:49
ну это значит сильная загрузка процессора,
машинка 1000 Мгц 3*128 Озу
просто не справляется работать не возможно

а напрямую БЕЗ прокси все ок -  летает

Автор: FishHunter 16.12.2011, 23:38
А что за прокси? Может стоит формировать список оных внешним скриптиком, проверяя скажем раз в 5 минут? + хз как вы там делаете, я так понял нужен обычный грабер html страниц? Если да то вот процедурка:
Код

sub GetHtml {
 my $url=$_[0];
 my $ref=$_[1];
 my $proxy=$_[2];
 my $browser = LWP::UserAgent->new;
    $browser->agent('Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt\)');
    $browser->timeout(30);
    $browser->proxy("http","http://$proxy"); # сюда ставить прокси как хочется
    $browser->cookie_jar( HTTP::Cookies->new(
             'file' => 'путь где куки хранить/cookies.lwp', 
             'autosave' => 1, 
             ));
 my $req = HTTP::Request->new(GET=>$url);
    $req->header('Accept' => 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*');
    $req->header("Accept-Language" => "en-US");
    $req->header("Referer" => "$ref");
 my $resp = new HTTP::Response;
    $resp = $browser->request($req);
 my $cont = $resp->content;
 my $code = $resp->code;
 my $message=$resp->message;
 if ($resp->is_success()) {return $cont;} else {return "$code - $message";}
}


т.е. обращаемся к процедуре так GetHtml($url,$ref,$proxy);  и соответсвенно $proxy берем из исходного списка скажем случайно smile - на выходе html код $url, если конечно он живой.
ЗЫ да модули нужно подключить:
use LWP::UserAgent;
use HTTP::Cookies;

Добавлено через 13 минут и 53 секунды
ЗЫЫ Я тут подумал на нетрезвую голову smile а может дело не в проксях а в "потоках", точнее в их организации, хотя ... всего 4 ...

Автор: burakov 17.12.2011, 22:39
В том то и дело
что в Вашем случае
даже больше тормозить должно
(прокси и тоже готовые из списка беру)


поскольку Вы каждый раз экземпляр броузера создаете

я LWP один раз создаю
а потом только прокси меняю
и все равно пипец тормозит...

конечно "тормозит" величина сложно описываемая, но к примеру
машина, где все работает
3000 Мгц 512 ОЗУ

всего 4 потока выставил
ну блин притормаживает  - то есть комфортно себя чувствуют только грабер 
параллельно работать сложно...

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

а вот такая команда
$browser->proxy("http","http://$proxy")
что то переделывает в экземпляре броузера и я так понимаю в этом момент и загрузка проца идет сильная.

версия перл
ActivePerl-5.12.0.1200-MSWin32-x86-292396.msi
версия LWP последняя с cpan.org

поделитесь как быстро все должно работать?


Автор: Pilat66 31.12.2011, 01:17
Ошибки ищутся показом кода скрипта, а не какими-то странными сообщениями о торможении 4-х потоков постоянно сменяющихся прокси.

Автор: burakov 6.1.2012, 00:50
Спасибо, всем, кто откликнулся.

проблема решена - она была не в lwp->proxy
немного помучался и выяснил, что тормозила БД
поскольку объем вырос до 1000000 записей.
пришлось переписать грабер, чтобы в sql запросах where = было по индексированному столбцу
как только код был переписан - тормоза пропали.
хотел все это обмануть путем переделки my.cnf (my.ini) От Mysql под более "мощную" машину,
но этот путь к положительному результату не привел.
пришлось оптимизировать код грабера.

еще раз всем спасибо.
тему ззакрываю.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)