1. ホーム
  2. perl

[解決済み] Perlでタイムアウトを行う方法?

2022-02-19 12:55:34

質問

Perlで特定のコード片の実行時間の上限を設定するために、次のパターンをよく使います。

my $TIMEOUT_IN_SECONDS = 5;
eval {
    local $SIG{ALRM} = sub { die "alarm\n" };
    alarm($TIMEOUT_IN_SECONDS);
    # do stuff that might timeout.
    alarm(0);
};
if ($@) {
    # handle timeout condition.
}

私の質問です。

  • このやり方は正しいのでしょうか?
  • 実行時間が$TIMEOUT_IN_SECONDSを超えるような状況はありますか、それとも上記の方法は弾丸のように安全ですか?

どのように解決するのですか?

をご覧ください。 Sys::SigAction . 私自身は使ったことがないのですが、このソフトには 熱いレビュー .

注意しなければならないのは、タイムアウトしそうなもの(quot; stuff that might timeout")が sleep または alarm そのものです。 また、エラー処理のコードでは、タイムアウト以外のエラーも想定しているのでしょう。