[caracas-pm] Re: [l-linux] Perl+Fork() y conexiones DBI

Ernesto Hernández-Novich emhn at telcel.net.ve
Fri Mar 25 17:34:14 PST 2005


On Thu, 2005-03-17 at 10:51 -0800, Daniel Cubero Salas wrote:
> Como siempre, me pueden dar unos consejos: acerca de
> conexiones a PostgreSQL (con DBI). 
> 
> Mi proceso perl saca datos de una tabla y de acuerdo a
> ciertos criterios los agrupa y divide, crea sendo
> procesos hijos para los "grupos" de datos y este hijo
> va a guardar en otra tabla los resultados (más o menos
> serán 8 procesos hijos que se crearán).
> 
> Los procesos hijos los creo con fork(). 

Si el proceso padre _sólo_ hace fork() en virtud de la semántica de
procesos en Linux (o Unix), cada hijo es una copia _idéntica_ del padre,
por lo tanto "hereda" los handlers (conexiones, instrucciones
preparadas, instrucciones ejecutadas no terminadas) que hubieras creado
antes del fork().

Esos handlers _no_ se deben usar. Estás en la obligación de
re-conectarte en el proceso hijo como si fuera la primera vez. El resto
del programa procede igual, recordando que estás en un proceso nuevo.

Es conveniente que establezcas las conexiones utilizando la opción
InactiveDestroy de DBI; depende de quien "muere" primero: si el padre
lanza los hijos y muere, es el único que debe usar InactiveDestroy =>
true; pero si el padre espera a que los hijos terminen entonces cada
hijo debe hacer InactiveDestroy => true.

Si el proceso padre hace fork() y exec(), los hijos no saben nada de
conexiones y tienes que comenzar de nuevo.

> He estado investigando acerca de esto; muchos
> recomienda que cada child debería hacer la conexión a
> la base y hacer los queries pero eso, en mi caso, no
> es tan recomendable.

Esa es la forma de hacerlo. ¿Qué hace que no sea recomendable en tu
caso?
-- 
Ernesto Hernández-Novich - On Linux 2.6.11 i686 - Unix: Live free or die!
Geek by nature, Linux by choice, Debian of course.
If you can't apt-get it, it isn't useful or doesn't exist.
GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3



More information about the caracas-pm mailing list