如果请求花费太多时间,请跳过

时间:2015-10-06 19:12:31

标签: perl time timer exception-handling

我有以下代码从URL请求标头:

#!/usr/bin/env perl
use strict;
use warnings;

use LWP;
use Data::Dumper;

my $request = HTTP::Request -> new ( HEAD => 'http://www.vliruos.be/media/6352100/nss2015_annex_3_budget.xlsx' ); 
my $agent = LWP::UserAgent -> new;
my $response = $agent -> request ( $request );
print $response -> header ( 'Content-Length'); 

...

我不知道原因,但请求似乎很慢,对我来说需要10秒以上。我只是想实现一个规则:如果它在10秒内没有返回任何内容,它应该放弃并在print之后恢复命令。

有谁知道如何实现这个?

1 个答案:

答案 0 :(得分:0)

您可以使用SIGALRM

$SIG{ALRM} = sub { die "timeout" };

eval {
    alarm(10);
    # long-time operations here
    alarm(0);
};

if ($@) {
    if ($@ =~ /timeout/) {
                            # timed out; do what you will here
    } else {
        alarm(0);           # clear the still-pending alarm
        die;                # propagate unexpected exception
    } 
}