0

フォーラムを見回して答えを探してみましたが、わかりません。計算に時間がかかるWebページのフォームを送信した後、Mechanizeはすべての計算が完了するのを待ちます(1時間かかる場合でも)。それは起こらないようです。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 );
                }
        }
}
4

1 に答える 1

4

WWW::Mechanizetimeoutコンストラクター(この場合は親クラスに渡されます)でオプションのパラメーター(秒単位で指定)を受け取ることができますLWP::UserAgent。デフォルトは180秒くらいだと思います。

次のように増やしてみてください。

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

これがどのように扱われるかの特定のセマンティクスについてはLWP::UserAgent、メソッドに関するドキュメントを参照してください。timeoutそれはほとんどあなたが期待する通りですが、念のためです。

于 2011-03-13T06:38:58.557 に答える