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»
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.