Parallel::ForkManager
permite el uso de llamadas diferidas
o callbacks.
Las callbaks se establecen mediante los métodos del objeto
Parallel::ForkManager
run_on_start, run_on_wait y run_on_finish.
Estas reciben como argumentos las referencias a las subrutinas que se ejecutarán en
las correspondientes situaciones.
Consulte el manual de Parallel::ForkManager.
Modifique el ejemplo en la sección anterior para que
disponga de un hash con claves en los PID
y cuyos valores sean un hash anónimo conteniendo la información
asociada al proceso: enlace a descargar, estatus de finalización
y el PID. Para actualizar el hash use callbacks
en el arranque y en la finalización de cada proceso.
Añada al programa un parámetro $limite que controla el tiempo límite
de descarga. Si el tiempo es superado elimine los procesos
de descarga que no hayan terminado. Use para ello un callback
de espera (run_on_wait).
Un manejador instalado con run_on_start será ejecutado cada vez que se
crea con éxito un nuevo proceso hijo. El manejador es llamado con
dos argumentos:
start)
El formato de llamada de run_on_wait
es run_on_wait($code, [$period]).
La rutina referenciada por $code es llamada por el
proceso padre cada vez que se crea un nuevo
hijo. Si se provee el segundo argumento $period
entonces la subrutina referenciada por $code es llamada
periódicamente, aproximadamente cada $period segundos.
No se le pasan parámetros a $code.
El siguiente ejemplo muestra la instalación de manejadores
on_start y on_wait.
$pm->run_on_start(
sub {
my ($pid, $link)=@_;
$pid_table{$pid} = {link => $link, pid => $pid, exit => undef};
}
);
$pm->run_on_wait(
sub {
print "Time: ".(time()-$start_time)."\n";
for (keys %pid_table) {
print "$_ => $pid_table{$_}->{link}\n";
}
print "\n";
}, $period
);
El manejador instalado mediante run_on_wait
muestra el tiempo transcurrido
desde $start_time asi como el contenido
del hash %pid_table:
Casiano Rodríguez León
