新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2009-07-29

[Perl]タイムアウト処理を簡単に実装できるTime::Out

Time::Outというモジュールがあります。コイツはタイムアウト処理を実装するのに非常に重宝します。

以下のような、えらく時間のかかるロジックがあったとします。

sub slow_logic {
sleep int( rand( 40 ) ) + 10;
'OK';
}


で、例えばこのロジックを実行したときに、30秒以内に処理が終わらなければ強制的処理を終わらせundefを返すようにしたい、という場合は

use Data::Dumper;
use Time::Out qw( timeout );
my $logic = timeout 30 => \&slow_logic;
print Dumper $logic;


とします。
実行結果は下記の通り。

# time perl ./hoge.pl
$VAR1 = undef;

real 0m30.142s
user 0m0.130s
sys 0m0.010s

# time perl ./hoge.pl
$VAR1 = 'OK';

real 0m21.153s
user 0m0.130s
sys 0m0.020s

0 件のコメント: