package Archer::Parallel::ForkManager;
use strict;
use warnings;
use Parallel::ForkManager;
sub new { bless {}, shift }
sub run {
my ($self, $args) = @_;
my $pm = Parallel::ForkManager->new( $args->{num} );
for my $elem ( @{ $args->{elems} } ) {
$pm->start and next;
$args->{callback}->( $elem );
$pm->finish;
}
$pm->wait_all_children;
}
1;
__END__
=head1 SYNOPSIS
my $manager = Archer::Parallel::ForkManager->new;
$manager->run(
{
num => 30,
callback => sub {
my $elem = shift;
$self->run_hook('process', {elem => $elem});
}
}
);