Механизировать вопрос относительно отправки () - PullRequest
0 голосов
/ 13 марта 2011

Я пытался поискать ответы на форуме и поискать ответы, но не могу понять.После отправки формы для веб-страницы, которая требует времени для выполнения некоторых вычислений, ждет ли Mechanize завершения всех вычислений (даже если это занимает час?).Кажется, что этого не происходит.Я перебираю подпрограмму, которая создает объект Mechanize, отправляет форму и загружает выходной файл после завершения вычислений.Тем не менее, я чувствую, что он переходит к следующей итерации цикла без выполнения всех этих задач, так как иногда вычисления занимают много времени.У кого-нибудь есть предложения?Благодарю.Это подпрограмма

sub microinspector {
        my ($sequence, $folder) = @_;
        print STDOUT "subroutine sequence: $sequence\n";
        my $browser = WWW::Mechanize->new();
        $browser->get("http://bioinfo.uni-plovdiv.bg/microinspector/");
        $browser->form_number(1);
        $browser->field("target_sequence", $sequence);
        $browser->select("Choose an organism : ", "Mus musculus");

        $browser->submit();
        #print $browser->content();
        my @links = $browser->links();

        chdir($folder) or die "Cannot chdir to $folder";

        foreach my $link (@links) {
                #print $link->url();
                if( $link->url() =~ /csv$/i ){
                        my $result = $browser->get( $link->url() );
                        my $filename = ( $link->url() =~ /\/([^\/]+)$/ )[0];
                        print "Saving $filename\n";
                        open( OUT, ">$filename" );
                        print OUT $result->content();
                        close( OUT );
                }
        }
}

1 Ответ

4 голосов
/ 13 марта 2011

WWW::Mechanize может принимать необязательный параметр timeout (указанный в секундах) в своем конструкторе (который в этом случае передается родительскому классу LWP::UserAgent). Я думаю, что по умолчанию, как 180 секунд.

Попробуйте увеличить его, например:

my $browser = WWW::Mechanize->new(
    timeout => 60 * 10,     # 10 minutes
);

См. LWP::UserAgent документы по методу timeout для конкретной семантики того, как это обрабатывается. В основном так, как вы ожидаете, но на всякий случай.

...