我有以下课程/包:
package Data::CrawlerThreadPool;
use Moose;
use MooseX::InsideOut;
use MooseX::NonMoose;
extends 'Thread::Pool::Simple';
around BUILDARGS => sub {
my $orig = shift;
my $class = shift;
return $class->$orig( do => [\&_do_handle],
min => 5,
max => 10 );
};
sub _do_handle {
$| = 1;
print "In Do handle";
}
1;
在我的主脚本中,我称之为(例如...),如下所示:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::CrawlerThreadPool;
my $tp = Data::CrawlerThreadPool->new();
my @args = qw(0 0 0 0 0 0 0 0 0);
$tp->add(@args) for (0..10);
$tp->join();
似乎调用了BUILDARGS方法,但进程确实处理从未被调用过。 我在这里错过了什么? Thread::Pool::Simple
感谢,
答案 0 :(得分:3)
\&_do_handle
没有调用_do_handle子 - 它只是取消引用对sub的引用。这个习惯用法通常在eval {}
内使用,以检查你是否真的有一个subref(或一个带有subref重载的对象) - 我认为这不是你打算在这里做的。
如果您打算实际调用_do_handle,请直接调用它:
around BUILDARGS => sub {
my $orig = shift;
my $class = shift;
return $class->$orig( do => [ _do_handle() ],
min => 5,
max => 10 );
};