• Publicidad

Ejecutar varias subrutinas simultáneamente.

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Ejecutar varias subrutinas simultáneamente.

Notapor asteriscos » 2006-02-05 15:19 @680

Hola,

Esto de aprender a programar se hace duro... y más cuando no tienes a nadie cerca para preguntarle cosas básicas ... ¡así que a ver si alguien puede ayudarme!
He diseñado una aplicación que está lanzando pings continuamente a una serie de máquinas remotas cada 100 segundos.
Esto funciona todo correctamente. Mi problema es que necesito tener controladas muchas máquinas. Tal y como he diseñado el programa, cuando tenga controladas, 150 o 200 equipos, tardará más de 100 segundos en lanzar un ping a cada una de ellas y en recoger e interpretar el resultado así q de alguna forma, tengo que poder ejecutar varias subrutinas simultáneamente, para así lanzar varios pings de forma simultánea y conseguir supervisar más equipos por segundo.
Estoy convencido de que esto se tiene que poder hacer pero la verdad....... he estado investigando en Internet y no he encontrado ningún sitio que me oriente como hacerlo.
¿Alguien puede arrojar un poco de luz a mi gran ignorancia ?

Gracias de antemano,
Joseba S.
asteriscos
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2006-01-15 18:42 @821

Publicidad

Re: Ejecutar varias subrutinas simultáneamente.

Notapor explorer » 2006-02-05 15:47 @699

1.- Para controlar muchas máquinas lo ideal es usar el protocolo SMNP, que para eso está.
2.- Hay utilidades de gestión de máquinas ya hechas, como el Nagios (Instalación, Configuración).
3.- Si la aplicación ya la tienes diseñada, pues entonces la aprovecharemos :-)

El problema con el monitorización con pings es justo el que comentas: tienes que esperar a que las máquinas vayan respondiendo para saber si están arriba o no.
Una opción es lanzar un proceso por cada máquina (o red de máquinas) y que se encargue de monitorizarlas. Luego tienes un programa principal que va mirando los resultados. El lugar común donde dejar los resultados puede/debe ser una base de datos.

Es una opción. A ver si hay más propuestas...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2006-02-06 09:55 @455

Hola:

En el siguiente artículo:
http://www.stonehenge.com/merlyn/UnixReview/col41.html

Randal L. Schwartz crea un código de ejemplo que te podría funcionar, pues hace un script que va creando procesos hijos para que se ejecuten paralelamente y manden pings justamente para ver si una maquina está viva o no.

Seguramente podrás implementarlo a tu propio próposito.


SALUDOS
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor Perl user » 2006-02-06 13:10 @590

La idea de usar forks es buena, aunque recordemos que el overhead y el request resources de Perl para realizar un fork es un poco costoso, en el caso de Win32 no se puede hacer mucho, fork está basado en ithreads ( en la misma idea ) ya que Windows no cuenta con un fork(1) similar al de un sistema operativo que cumpla con POSIX. Y si tienes ithreads habilidados en Win32, yo te recomiendaría utilizarlos, es menos costoso copiar solo la sección de datos y compartir memoria entre un thread, que copiar toda una imagen de proceso con fork(1).

Ahora bien si estás en un sistema POSIX ( cualquier UNIX ), fork si es menos costoso de alguna manera que ithreads, puesto que el model de Threads de Perl aun está muy verde, y es menos eficiente que fork(1) directamente...

Así que de alguna manera te recomiendo leer el manual del módulo de ithreads o perlthrtut. Comenzar a pensar en threading es muy bueno.

Ahora, independientemente de las soluciones anteriores, la que sigue mas eficiente, si quieres ejecutar pings simultáneos es utilizando POE, dirán: "Ah como le hace propaganda", no no es propaganda, aunque conozco de muy cerca ( tiempo ) al autor... el framework es una técnica estudiada de hace mucho tiempo, publicada por Donald E. Knuth en sus libros "The Art of Computer Programming" publicados por los 70's.

Bien, no explicaré de nuevo que hace POE, pero basta decir que su naturaleza nata es ser multitareas, por lo tanto ejecutar operaciones "simultáneas" ( en un X quantum de tiempo ) es su especialidad.

Te dejo un ejemplo de como hacer lo del ping simultáneo desde POE:

http://poe.perl.org/?POE_Cookbook/Pingi ... iple_Hosts

Saludos,
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

Notapor asteriscos » 2006-02-08 07:51 @369

Hola,

Lo primero gracias a todos los que habeís respondido !!!!
De todas las respuestas recibidas, la que más me ha gustado es la que propone "Una opción es lanzar un proceso por cada máquina (o red de máquinas) y que se encargue de monitorizarlas. Luego tienes un programa principal que va mirando los resultados"
Desde luego esta opción me parece la más sencilla y como no tengo problemas de rendimiento, pues es la opción más interesante......
¿ Pero....... como lo pongo en prácita ? - ¿ alguien me puede poner un ejemplo muy sencillo ?
Gracias por iluminar mi ignorancia !!!!!

Joseba S.
asteriscos
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2006-01-15 18:42 @821


Volver a Intermedio

¿Quién está conectado?

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