Concurrencia y consultas a MySQL
Publicado: 2013-01-07 15:30 @688
Hola, estoy teniendo problemas con un script que es una especie de dæmon, en el cual se crean varios procesos que hacen diferentes acciones en una BD MySQL. El tema es que los resultado resultan ilógicos, o "explota".
Resumiendo, el programa sería básicamente esto:
Tengo una clase que se encarga de conectarse a la BD y ejecutar las queries. Algunas funciones son estas:
¿Alguna idea de cómo puedo solucionar este tema?
¡Gracias!
Resumiendo, el programa sería básicamente esto:
Using perl Syntax Highlighting
...;
while (1) {
my $child_id = fork();
if ($child_id) {
...
}
else {
# Se ejecutan varios módulos según parámetros en paralelo que acceden a la BD
# (consultas, updates, etc.)
}
}
while (1) {
my $child_id = fork();
if ($child_id) {
...
}
else {
# Se ejecutan varios módulos según parámetros en paralelo que acceden a la BD
# (consultas, updates, etc.)
}
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Tengo una clase que se encarga de conectarse a la BD y ejecutar las queries. Algunas funciones son estas:
Using perl Syntax Highlighting
- sub connect {
- my $self = shift;
- $dsn = "DBI:mysql:database=$self->{database};host=$self->{host};port=$self->{port}";
- return $db if defined $db;
- $db = DBI->connect( $dsn, $self->{user}, $self->{password}, { RaiseError => 1 } );
- $db->{mysql_auto_reconnect} = 1;
- $db->{InactiveDestroy} = 1;
- $db->{'AutoCommit'} = 1;
- return $db;
- }
- sub executeSQLUpdate {
- my $self = shift;
- my $sql = shift;
- my $mySQL = $db->prepare($sql) or print "Error en prepare $sql" . $db->errstr;
- $mySQL->execute() or print "Error en execute '$sql' \n ";
- $mySQL->finish();
- return;
- }
- sub getValue {
- my $self = shift;
- my $sql = shift;
- $self->connect();
- my $mySQL = $db->prepare($sql) or print "Error en prepare $sql" . $db->errstr;
- my $result = $mySQL->execute() or print "can't execute the query: " . $mySQL->errstr;
- if ( $mySQL->rows == 0 ) {
- return undef;
- }
- else {
- my @element = $mySQL->fetchrow_array();
- return $element[0];
- }
- }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
¿Alguna idea de cómo puedo solucionar este tema?
¡Gracias!