my @mp3s = ( 'a' .. 'z' );
my $cores = 4;
my @queue;
push @queue, [ splice @mp3s, 0, $cores ] while @mp3s;
####
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;
}
##
##
$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'
]
];
##
##
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
}
}