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


Автор: Валерия 6.2.2009, 05:17
Собственно, есть полу-мертвый хост (  smile )
Так вот, если я делаю запрос к нему через LWP, то может скрипт зависнуть и ждать ответа от сервера "годами" smile
Если ставлю 
Код

$ua->timeout = 10;

То не помагает, будто оно вообще ни на что не влияет...
Что делать?
Читала что можно сделать через alarm, но тогда получаеться немного, простите, через попу, и говорят что под виндой может не работать.

LWP 5.64
ActivePerl 5.10

Автор: arto 6.2.2009, 08:02
$ua->timeout (10) ?

Автор: Валерия 6.2.2009, 14:08
Ой, я так и задавала как ты написал, просто тут опечаталась smile

Автор: NuINu 6.2.2009, 15:15
Цитата(Валерия @  6.2.2009,  12:08 Найти цитируемый пост)
Ой, я так и задавала как ты написал, просто тут опечаталась smile 

приведите полный код, я не верю что не работает!

Автор: Валерия 6.2.2009, 15:50
Код

$proxy = "61.19.222.7:80";
$browser = LWP::UserAgent->new;
$browser->timeout(10);
$browser->cookie_jar(HTTP::Cookies->new);
$browser->proxy([qw(http https)] => "http://$proxy");
$response = $browser->get("http://yandex.ru")->as_string;
print $response;


Мне именно с проксей smile

Автор: NuINu 6.2.2009, 16:41
признаться вы поставили меня в тупик, не понимаю почему у вас не отрабатывает таймаут.

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

Автор: Валерия 6.2.2009, 17:30
На других форумах поискала, таки проблема в активпёрле, и советуют через alert делать smile

Автор: NuINu 6.2.2009, 19:54
alert?

Автор: tolkien 6.2.2009, 22:11
alarm некорректно работает в Windows. Вам следует перейти на UNIX. Или искать решения которые работают в Windows. 
Например для таймута следует использовать след код. 
Код


vec($rin, fileno(F), 1) = 1;
my $nfound = select($rout=$rin, undef, undef, .2);  #таймаут 0.2 сек. Если есть данные в сокете то nfound  будет true


И модули которые соответ. реализовали таймаут данным образом. Этот код 100% рабочий. И работает как в UNIX так и в Windows

Автор: FooBar 6.2.2009, 22:34
можно использовать http://search.cpan.org/~szbalint/WWW-Curl-4.05/lib/WWW/Curl.pm в нем есть и таймаут и параллельные запросы которые могут послужить заменой потокам, через прокси там тоже можно (вроде бы только http), если написать обёртку то по удобству не будет уступать lwp а по скорости будет превосходить, правда под вендой наверно придется http://cpansearch.perl.org/src/SZBALINT/WWW-Curl-4.05/README.Win32 с установкой

Автор: Валерия 9.2.2009, 16:07
FooBar, multi_curl есть и в php, только если отправить 20 запросов паралельных, то пока все не отработают ты не получишь ничего smile
Я как раз из за потоков в перле его и начала учить smile
Но на никсы не перейду.
Точнее мне без проблем перейти, но не заказчику smile

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