加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 在角色中设置警报

发布时间:2020-12-16 06:14:26 所属栏目:大数据 来源:网络整理
导读:我有一堆通过网络进行不同操作的类,众所周知,网络操作有时会超时.所以我想做这样的事情: package My::Role::NetworkFetcher { use Moose::Role; sub BUILD { my $self = shift; local $SIG{ALRM} = sub { $self-handle_timeout; }; alarm 60; } sub handle_
我有一堆通过网络进行不同操作的类,众所周知,网络操作有时会超时.所以我想做这样的事情:

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方法或以这种方式本地化信号处理程序是正确的,甚至是可取的.

解决方法

小心点.本地$SIG {ALRM}仅适用于BUILD方法,因此如果您在不调用警报0的情况下离开函数范围,则如果您离开BUILD方法并且发生超时,则会发生默认的ALRM处理程序.在eval中完成整个事情是最安全的,这样你就不会遇到模糊的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读