use Parallel::ForkManager qw( );
my @testLists = ...;
my $pm = Parallel::ForkManager->new( 2 );
for my $list ( @testLists ) {
$pm->start and next;
$status += regressions( $opts, $list );
$pm->finish;
}
$pm->wait_all_children();
That said, you are changing $status in the child to no effect. Did you mean to exit with that code?
use Parallel::ForkManager qw( );
my @testLists = ...;
my $status = 0;
my $pm = Parallel::ForkManager->new( 2 );
$pm->run_on_finish(sub {
my ( $pid, $exit_code, $ident ) = @_;
$status += $exit_code;
});
for my $list ( @testLists ) {
$pm->start and next;
my $status = regressions( $opts, $list );
$status = 255 if $status > 255;
$pm->finish( $status );
}
$pm->wait_all_children();
P::FM also facilitates passing more complex values back to the parent.
use Parallel::ForkManager qw( );
my @testLists = ...;
my $status = 0;
my $pm = Parallel::ForkManager->new( 2 );
$pm->run_on_finish(sub {
my ( $pid, $exit_code, $ident, $exit_signal, $core_dump, $data ) =
+@_;
if ( $exit_code || $exit_signal || $core_dump ) {
# Handle error.
}
$status += $data->{ status };
});
for my $list ( @testLists ) {
$pm->start and next;
my $status = regressions( $opts, $list );
$pm->finish( 0, { status => $status } );
}
$pm->wait_all_children();
Update: Applied marioroy's fix.
|