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}); } } );