¿Hay una manera de tener procesos administrados en Perl (es decir, un reemplazo de hilos que realmente funciona)?

StackOverflow https://stackoverflow.com/questions/138696

Pregunta

Tengo una aplicación de múltiples enlaces en perl para la cual tengo que confiar en varios módulos seguros que no son subprocesos, por lo que he estado usando los procesos ed fork () con kill () señales como una interfaz de paso de mensajes.

El problema es que los manejadores de señales son un poco erráticos (por decir lo menos) y con frecuencia terminan con procesos que se eliminan en estados inapropiados.

¿Hay una mejor manera de hacer esto?

¿Fue útil?

Solución

Eche un vistazo a forks.pm , un " reemplazo directo para los hilos de Perl usando fork () " lo que hace que el uso de la memoria sea mucho más sensible (pero no lo use en Win32). Le permitirá declarar " compartido " variables y luego pasa automáticamente los cambios realizados a dichas variables entre los procesos (similar a como threads.pm hace las cosas).

Otros consejos

Dependiendo de lo que debe hacer exactamente su programa, puede considerar el uso de POE , que es un marco Perl para aplicaciones de subprocesos múltiples con subprocesos de espacio de usuario. Es complejo, pero elegante y poderoso, y puede ayudarlo a evitar módulos que no sean seguros para subprocesos al limitar la actividad a un único subproceso de intérprete de Perl.

Recursos útiles para comenzar:

Además, hay cientos de componentes de POE Puede utilizar para ensamblar en una aplicación.

Siempre puedes tener una conexión entre el padre y el hijo para pasar mensajes de un lado a otro.

pipe my $reader, my $writer;
my $pid = fork();
if ( $pid == 0 ) {
    close $reader;
    ...
}
else {
    close $writer;
    my $msg_from_child = <$reader>;
    ....
}

No es una forma muy cómoda de programar, pero no debería ser "errática".

A partir de Perl 5.8, deberías mirar el módulo de subprocesos básicos. Eche un vistazo a http://metacpan.org/pod/threads

Si desea usar módulos que no son seguros para subprocesos, generalmente puede cargarlos con un requerimiento e importarlos dentro del punto de entrada del subproceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top