• Publicidad

Problema con multihilo

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Notapor Perl user » 2006-10-15 12:42 @571

explorer escribiste:Si las llamadas son 'fork', entonces, efectivamente, deberás usar un sistema operativo compatible Unix.

Y para depurar, puedes usar el Eclipse+epic, claro, pero recuerda que el Perl lleva su propio depurador: perl -d


Que tal,

explorer,
De hecho fork existe en Win32 también para el caso de Perl, está implementado usando ithreads, gracias a ellos existe fork ( es una emulación de la versión de los UNIX-like ).

fgalves,
Para depurar, aparte de los IDEs ya comentados ( que honestamente jamás he usado uno para programar en Perl ), recomiendo directamente el Perl Debugger ( que también ya lo recomendaron ).

Cabe destacar que depurar una aplicación con múltiples procesos y/o multiples threads es una tarea no siempre tan trivial, dependiendo la complejidad de la aplicación.
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Publicidad

Notapor fgalves » 2006-10-15 16:38 @734

Aqui está la parte del codigo en la que se crean los hijos. Quizás os dé pistas de cómo ayudarme:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
# File matches with the interval
        if ($MAXNUMBEROFTHREADS > 0 )
        {
            while ($nbProc >= $MAXNUMBEROFTHREADS) {
                &waitEndOfChild(\$nbProc);
            }

            # Start a child process
            my $val = fork();

            if ($val == 0)
            {
                # The child reinits its own stat values
                &FqStatsCore::initSubProcessesParameters($$);
                # The child process the file
                &processFile($files[$i],$day,$startDate,$endDate,$func);
                # The child saves its own stat results that will be gathered
                # by the main process
                &FqStatsCore::saveSubProcessesResults($$);

                exit 0;
            }
            else
            {
                # Main process keeps the list and the order of the started
                # children
                push(@childrenPids, $val);
                $lastIndex = $i;
                $nbProc++;
            }
        }
        else
        {
            # Sequential mode.
            &processFile($files[$i],$day,$startDate,$endDate,$func);
            $lastIndex = $i;
        }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor fgalves » 2006-10-15 16:43 @738

Y aquí está la función initSubProcessParameters que llama a la función que ya mencioné en un comentario anterior en el que ponía a cero la variable contador en cuestión.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub initSubProcessesParameters {
    my $pid = $_[0];

    my $status;

    $firstReadDate = undef;
    $lastReadDate  = undef;
    $readLines     = 0;

    &Aggregation::initAggregationsValues($workingDirectory);
    my $initParams = {WorkingDirectory => $workingDirectory, ProjectionHeader => $projectionFileHeader};
    &Projection::initProjectionsValues($initParams);
    $status = &Projection::initSubProcessesProjections($pid);
    if ($status != 0) {
        &Logger::logError("Failed to open some temporary sub projection result files.\n");
    }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor explorer » 2006-10-15 16:55 @746

Yo no veo nada raro... ¿cómo sabes que la variable está siendo incrementada?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor fgalves » 2006-10-16 01:31 @105

Por lo visto el valor que me imprime para el TRAILER es el inicializado en la función initProjectionValues.
He inicializado la variable global (el my $flatValidLines a 0) y en la función he inicializado a 5.
Pues el trailer me lo imprime a 5.

¿Es posible que se incremente el valor correctamente, pero que luego uno de los procesos hijos entre, inicialice a 0 (tal y como esta por defecto) y pierda el valor incrementado hasta el momento?

¡¡Gracias por adelantado!!!

Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor fgalves » 2006-10-16 01:34 @107

Perdón, me confundí:

La variable global, la inicialicé a -2.
La variable de la función iniProjectionValues, por donde entran los forks, la inicialicé a 5.
El TRAILER me lo imprime a 5.

Gracias
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor explorer » 2006-10-16 03:32 @189

Pues eso, que no es incrementada...

Podrías también haber puesto un print "Se incrementa\n"; dentro de la función printFlatDecodedLine para saber si lo hace o no..
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor fgalves » 2006-10-16 03:58 @207

Es algo rarisimo...

Por lo visto, hay un perl module llamado OUTBRS.pm, donde se encuentran las funciones anteriores
-printFlatDecodedLine
- iniProjectionValues

que es la instancia de un objeto definido en un perl module llamado Projection.pm

Por lo visto, todas las variables globales que intento guardar en Outbrs.pm, se quedan a 0 inexplicablemente.

A ver si descubro el problema pq lo tengo que resolver para hoy a mas tardar! :(

Gracias
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor fgalves » 2006-10-16 04:04 @211

De hecho si que incrementa, pues en la funcion printFlatDecodedLine, que es donde se incrementa la variable, pues la imprimo y va incrementando pero de forma rara, o sea, como si los 4 forks lo fueran haciendo a su manera. esa es la sensacion que me da.
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor explorer » 2006-10-16 04:09 @215

print "Incrementando en $$\n";Así sabrás qué fork está incrementando...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados