El caso es que tengo un array @files_to_be_restored que contiene una lista de nombre de ficheros:
Using perl Syntax Highlighting
@files_to_be_restored = (file1, file2, file3, ..., fileN);
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Trabajando en multiproceso, tengo un número P de procesos que deben procesar dicha lista, pero cada proceso debe procesar únicamente los ficheros de la parte que le corresponde.
Es decir, supongamos que tengo 6 procesos. La lista @files_to_be_restored anterior debe ser repartida, y cada proceso debe trabajar únicamente sobre los ficheros que le han sido atribuidos.
Es ahí donde radica la dificultad, ya que no sé cómo repartir dichos ficheros entre los diferentes procesos de manera equitativa.
De momento llevo hecho lo siguiente:
Using perl Syntax Highlighting
# number of files to be restored
my $numberOfFiles = $#files_to_be_restored;
my $MAXNUMBEROFTHREADS = 6;
my $filesPerProcess = $numberOfFiles/$MAXNUMBEROFTHREADS;
my $numberOfChilds = 0;
my $firstIndexFile = 0;
my $lastIndexFile = 0;
# Creates sub-processes and assign to each one a subset of fields to be rescued
if ($MAXNUMBEROFTHREADS > 0 )
{
$numberOfChilds++;
# Start a child process
my $val = fork();
# the child process
if ($val == 0)
{
#el proceso hijo tiene una copia de la lista de ficheros total, @files_to_be_restored
#obtain subset of files to be restored
$firstIndexFile = ($numberOfChilds-1)*$filesPerProcess;
$lastIndexFile = $firstIndexFile + $filesPerProcess;
#en @files_to_be_restored necesito tener unicamente la parte que le corresponde al proceso en cuestion
@files_to_be_restored = @files_to_be_restored[$firstIndexFile..$lastIndexFile];
my $numberOfFiles = $#files_to_be_restored;
my $MAXNUMBEROFTHREADS = 6;
my $filesPerProcess = $numberOfFiles/$MAXNUMBEROFTHREADS;
my $numberOfChilds = 0;
my $firstIndexFile = 0;
my $lastIndexFile = 0;
# Creates sub-processes and assign to each one a subset of fields to be rescued
if ($MAXNUMBEROFTHREADS > 0 )
{
$numberOfChilds++;
# Start a child process
my $val = fork();
# the child process
if ($val == 0)
{
#el proceso hijo tiene una copia de la lista de ficheros total, @files_to_be_restored
#obtain subset of files to be restored
$firstIndexFile = ($numberOfChilds-1)*$filesPerProcess;
$lastIndexFile = $firstIndexFile + $filesPerProcess;
#en @files_to_be_restored necesito tener unicamente la parte que le corresponde al proceso en cuestion
@files_to_be_restored = @files_to_be_restored[$firstIndexFile..$lastIndexFile];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
¿Alguien me puede echar una manita? ¿Estoy planteando el problema de forma correcta?
¡Gracias por adelantado!
¡Saludos!
Felipe