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


Автор: Валерия 3.9.2014, 20:13
При использовании потоков и lwp загружая странички с https частенько полностью всё вылетает, я так понимаю что lwp не очень потокобезопастный
Как можно это исправить?

Добавлено через 9 минут и 38 секунд
Если запустить такое, то начинают сильно сыпаться всевозможные ошибки
Код

use threads;
use LWP;

for $i (1..40){
    push @threads, threads->create(\&thr, $i);
}

foreach my $thread (@threads) {
    $thread->join();
}



sub thr {
    $n = shift;
    print "$n started\n";
    while (1){
        $ua = LWP::UserAgent->new();
        $ua->timeout(15);
        $content = $ua->get("https://mail.yandex.ua")->as_string();
        print $n . " " . time() . "\n";
    }
}


Автор: Bulat 3.9.2014, 20:30
Цитата(Валерия @  3.9.2014,  20:13 Найти цитируемый пост)
Если запустить такое, то начинают сильно сыпаться всевозможные ошибки

у мя все работает!  smile 

Ты под виндой работаешь?? Если да? то это проблема винды и тредов в нем, а не lwp.  smile 

Автор: Валерия 3.9.2014, 20:32
Да под виндой
Может есть альтернатива ActivePerl под win в которой нормально будет работать такое?

Автор: arto 3.9.2014, 20:33
AnyEvent::HTTP ?

Автор: infarch 5.9.2014, 12:26
Статья в тему: http://habrahabr.ru/post/234835/

Переделайте пример под работу с сетью и проверьте.

Автор: Pfailed 6.9.2014, 21:05
use Coro  smile

Код

use Coro::LWP;
use Coro::PatchSet;
use Coro;
use LWP;

for $i (1..40){
    push @threads, Coro->new(\&thr, $i);
    $threads[-1]->ready;
}

foreach my $thread (@threads) {
    $thread->join();
}

sub thr {
    $n = shift;
    print "$n started\n";
    while (1){
        $ua = LWP::UserAgent->new();
        $ua->timeout(15);
        $content = $ua->get("https://mail.yandex.ua")->as_string();
        print $n . " " . time() . "\n";
    }
}

Автор: Pfailed 6.9.2014, 21:29
Кстати "use strict" не пробовали? Использование глобальных переменных в подпрограмме это высший пилотаж.

Автор: tzirechnoy 7.9.2014, 08:46
Цитата
Использование глобальных переменных в подпрограмме это высший пилотаж.


В мультитредной подпрограмме, что характерно. +1, да, я как-то пропустил вчера это мимо глаз.

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