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


Автор: winspice 22.4.2014, 21:17
Скрипт многопоточный, когда запускаешь его с прокси, то всё нормально ... ставь хоть 150 потоков. А когда запускаешь без, и ставишь потоков 10 начинает просто жрать память и поток завершает работу. Я вот не могу понять из-за чего такое?
Бывает что работает , работает и сам завершит работу. Можно как-нибудь узнать из-за чего такое происходит ? ... 

Автор: Bulat 22.4.2014, 23:48
Можно!  smile Чем больше информации от вас - тем больше мыслей и соображений!  smile 

Автор: winspice 23.4.2014, 00:55
Это происходит в любом скрипте где используется многопоточность.  (Это я про, то что жрет все  12гб при 10 потоках) и бывает не понятно почему еще сам завершает работу, даже когда идет работа с прокси и с памятью всё нормально.

Код

$trl[$_] = threads->create(\&main) for 0..$threads - 1;
$_->join for @trl;



sub main
{

if ($use_proxy){ while(!($request = proxy($browser,$_))){} }

open (A, '>>./file/base_new.txt');

    while (@base)
    {
        my $murl;    
        {lock(@base); ($murl) = shift @base;}
        
AGAIN:        

            cout("thr $_: - check: $murl");
        
            $request = $browser->get("1")->as_string;
            #record('test.html',$request);
            
            if ($request !~ /1/)
            {
                cout("thr $_: [!] bad proxy $murl");
                if ($use_proxy){ while(!($request = proxy($browser,$_))){} }
                goto AGAIN;
            }
            
            if ($request =~ /1/)
            {
                my $encoded = $1;
                my $decoded = $uri->decode($encoded);
                
                if ($decoded =~ /1/)
                {
                                      flock A, LOCK_EX;
                    cout ($1);
                    print A "$1\n";
                    flock A, LOCK_UN;
                    $amout++;
                }
            }
    }
}

close A;

Автор: Bulat 23.4.2014, 06:55
winspice, а сообщения об ошибках какие-нить вообще есть, может варнинги??

Автор: noize 23.4.2014, 09:24
вместо goto AGAIN используйте лучше next AGAIN или redo AGAIN. Потомки будут вам благодарны)

Автор: winspice 23.4.2014, 11:30
Цитата(noize @ 23.4.2014,  09:24)
вместо goto AGAIN используйте лучше next AGAIN или redo AGAIN. Потомки будут вам благодарны)

Хорошо, спасибо smile)

Проскакивает вот такое 
Thread 42 terminated abnormally: Can't locate object method "_uric_escape" via p
ackage "URI::SUPER" at C:/Perl64/lib/URI.pm line 81.
А так происходит, что никакая страница не открывается и начинает жрать память и выдает 
cout("thr $_: [!] bad proxy $murl"); 
Сайт 100% не блочит.

Автор: Bulat 23.4.2014, 12:01
Цитата(winspice @  23.4.2014,  11:30 Найти цитируемый пост)
Thread 42 terminated abnormally: Can't locate object method "_uric_escape" via package "URI::SUPER" at C:/Perl64/lib/URI.pm line 81.

ну как минимум одна бага на лицо!   smile 

Автор: winspice 23.4.2014, 12:41
И как от неё избавиться smile

Автор: Bulat 23.4.2014, 12:49
Цитата(winspice @  23.4.2014,  12:41 Найти цитируемый пост)
И как от неё избавиться

А по самому сообщению догадаться в чем причина??  smile 

Цитата(winspice @  23.4.2014,  11:30 Найти цитируемый пост)
Can't locate object method

Обращение не к существующему методу объекта, в следствии происходит
Цитата(winspice @  23.4.2014,  11:30 Найти цитируемый пост)
Thread 42 terminated abnormally


Какая ось и какая версия интерпретатора?? И я так полагаю 64-х битная архитектура??

Автор: tzirechnoy 23.4.2014, 14:39
Ваш код, по очевидным причинам, не запускается -- и, например я, дажэ отдалённо не могу представить, что он должэн делать.

Автор: noize 23.4.2014, 14:39
ковырните исходник URI, посмотрите, где вызывается метод "_uric_escape"
Как вариант, стоит обновить все модули, участвующие в работе. Ну и может быть дело в самом виндовом интерпретаторе. Попробуйте поставить другой или проверьте работу на линуксовой машине.

Автор: winspice 23.4.2014, 15:08
Цитата(Bulat @ 23.4.2014,  12:49)
Цитата(winspice @  23.4.2014,  12:41 Найти цитируемый пост)
И как от неё избавиться

А по самому сообщению догадаться в чем причина??  smile 

Цитата(winspice @  23.4.2014,  11:30 Найти цитируемый пост)
Can't locate object method

Обращение не к существующему методу объекта, в следствии происходит
Цитата(winspice @  23.4.2014,  11:30 Найти цитируемый пост)
Thread 42 terminated abnormally


Какая ось и какая версия интерпретатора?? И я так полагаю 64-х битная архитектура??

This is perl 5, version 16, subversion 1 (v5.16.1) built for MSWin32-x64-multi-thread

Автор: Bulat 23.4.2014, 15:22
Цитата(winspice @  23.4.2014,  15:08 Найти цитируемый пост)
This is perl 5, version 16, subversion 1 (v5.16.1) built for MSWin32-x64-multi-thread 

Ну тут я тебе не особый помошник, венды под рукой нету, как впрочем и версии интерпретатора 5.16

Могу лишь дать пару советов.
1. Попробуй поискать на репозитариях последнюю версию модуля URI под свою версию интерпретатора, то бишь 5.16 и залить к себе на машину - она мож уже попатченная будет.
Ежели бага не попатчена
2. Попробуй установить версию интерпретатора 5.14 - ее библиотеки наверно постабильнее будет.
Если манипуляции с версиями интерпретатора и модулями с репозитариев не дадут результата:
3. Лезь в сам код модуля URI и правь багу самостоятельно!

Больше ничего посоветовать не могу!  smile 

Автор: winspice 23.4.2014, 16:30
Цитата(Bulat @ 23.4.2014,  15:22)
Цитата(winspice @  23.4.2014,  15:08 Найти цитируемый пост)
This is perl 5, version 16, subversion 1 (v5.16.1) built for MSWin32-x64-multi-thread 

Ну тут я тебе не особый помошник, венды под рукой нету, как впрочем и версии интерпретатора 5.16

Могу лишь дать пару советов.
1. Попробуй поискать на репозитариях последнюю версию модуля URI под свою версию интерпретатора, то бишь 5.16 и залить к себе на машину - она мож уже попатченная будет.
Ежели бага не попатчена
2. Попробуй установить версию интерпретатора 5.14 - ее библиотеки наверно постабильнее будет.
Если манипуляции с версиями интерпретатора и модулями с репозитариев не дадут результата:
3. Лезь в сам код модуля URI и правь багу самостоятельно!

Больше ничего посоветовать не могу!  smile

Всем спасибо. Буду разбираться.

Автор: GoodBoy 24.4.2014, 22:13
winspice, я бы вам посоветовал, для начала, вообще избавиться от переходов по меткам... Честно говоря, последний раз такое видел на Бейсике, лет 20 назад. А на Перле вообще никогда не использовал.

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