MCE - map running in parallel
-
MCE
-
fork
-
map
The MCE package provides a map-like function that automatically runs the different tasks in separate processes then collects the results in the correct order.
By default it creates 4 child processes, but you can control that and a few other things by calling the init method.
use strict;
use warnings;
use MCE::Map;
main();
sub main {
print "main PID: $$\n";
my @results = mce_map { work($_) } 1..10;
print "Results: @results\n";
}
sub work {
my ($param) = @_;
print "Param $param PID: $$\n";
return $param * $param;
}
main PID: 150164
Param 1 PID: 150168
Param 2 PID: 150168
Param 7 PID: 150167
Param 8 PID: 150167
Param 3 PID: 150165
Param 5 PID: 150166
Param 4 PID: 150165
Param 6 PID: 150166
Param 9 PID: 150168
Param 10 PID: 150168
Results: 1 4 9 16 25 36 49 64 81 100