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处理程序。在一次评估中完成整个工作是最安全的,这样您就不会遇到模糊的问题。这实际上是我的意图——基本上,这些类执行队列中的某些作业,每个进程一个。我想将超时设置为这样一种方式:如果作业耗时超过一分钟,进程将终止并记录错误,那么您就没有什么可担心的了。你贴的东西我觉得不错。