Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 在角色中设置警报_Perl_Oop_Ipc_Moose_Alarm - Fatal编程技术网

Perl 在角色中设置警报

Perl 在角色中设置警报,perl,oop,ipc,moose,alarm,Perl,Oop,Ipc,Moose,Alarm,我有很多类在网络上执行不同的操作,我们都知道,网络操作有时会超时。所以我想做这样的事情: package My::Role::NetworkFetcher { use Moose::Role; sub BUILD { my $self = shift; local $SIG{ALRM} = sub { $self->handle_timeout; }; alarm 60;

我有很多类在网络上执行不同的操作,我们都知道,网络操作有时会超时。所以我想做这样的事情:

package My::Role::NetworkFetcher { 
    use Moose::Role;

    sub BUILD { 
        my $self = shift;
        local $SIG{ALRM} = sub { 
            $self->handle_timeout;
        };

        alarm 60;
    }

    sub handle_timeout { 
        die "default timeout handler";
    }

}

我不确定这是不是最好的办法。在我非常简单的测试用例中,它似乎工作正常,但我不确定劫持对象的
BUILD
方法或以这种方式定位信号处理程序是否正确,甚至是否可取

这里要小心。local$SIG{ALRM}仅适用于构建方法,因此,如果您离开函数的作用域而未调用报警0,则如果您离开构建方法并发生超时,将出现默认的ALRM处理程序。在一次评估中完成整个工作是最安全的,这样您就不会遇到模糊的问题。

这实际上是我的意图——基本上,这些类执行队列中的某些作业,每个进程一个。我想将超时设置为这样一种方式:如果作业耗时超过一分钟,进程将终止并记录错误,那么您就没有什么可担心的了。你贴的东西我觉得不错。