I'm a bit late but perhaps this might be still of interest:
Using splice for building the subqueues:
my @mp3s = ( 'a' .. 'z' ); my $cores = 4; my @queue; push @queue, [ splice @mp3s, 0, $cores ] while @mp3s;
Or an iterator with List::MoreUtils:
use List::MoreUtils qw (natatime); my @mp3s = ( 'a' .. 'z' ); my $cores = 4; my @queue; my $iterator = natatime $cores, @mp3s; while ( my @buff = $iterator->() ) { push @queue, \@buff; }
This yields:
$VAR1 = [ [ 'a', 'b', 'c', 'd' ], [ 'e', 'f', 'g', 'h' ], [ 'i', 'j', 'k', 'l' ], [ 'm', 'n', 'o', 'p' ], [ 'q', 'r', 's', 't' ], [ 'u', 'v', 'w', 'x' ], [ 'y', 'z' ] ];
Then:
use Parallel::ForkManager; my $cores = 4; my $pm = Parallel::ForkManager->new($cores); foreach my $child (@queue) { $pm->start and next; process($child); $pm->finish; } $pm->wait_all_children; sub process { my $mp3s = shift; foreach my $mp3 (@$mp3s) { # do the stuff } }
Regards, Karl
«The Crux of the Biscuit is the Apostrophe»
In reply to Re: No Performance gain with Parallel::ForkManager
by karlgoethebier
in thread No Performance gain with Parallel::ForkManager
by walto
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |