Hola gente,
Necesito algunas ideas sobre cómo hacer *bien* un proyecto en el que estoy trabajando.
Intento crear una estructura de "componentes", es decir, que haya un módulo central que cargue y administre otros. Este módulo central no debe hacer nada más que cargar a los demás y recibir sus actualizaciones de estado. (en realidad luego será la base de la interfaz del sistema, pero no he llegado a ese punto aún)
Por otro lado, cada módulo a cargar debe ejecutar una acción cada cierto tiempo, sin molestar a los demás. Para esto no tengo inconvenientes, simplemente arranco un hilo diferente para cada uno, con un bucle tipo.
Código:
mientras no me tenga que detener:
funcion()
dormir (x segundos)
Ahora, también necesito poder llamar a funcion() directamente (quizás desde un botón en una ventana), y que se ejecute inmediatamente.
El problema es que si mi "módulo" es un hilo, y está ejecutando el bucle infinito (o durmiendo), no recibirá la petición de ejecutar la función, ¿o sí?.
Tampoco quiero crear dos hilos por módulo (uno para que el módulo no 'tranque' al módulo central, otro que periódicamente ejecute una función), parece excesivo
Pensé en crear un hilo que se encargue exclusivamente de ejecutar cada cierto tiempo las funciones correspondientes, pero surge un inconveniente más: si simplemente hago
Código:
mientras no me tenga que detener:
funcion1()
funcion2()
...
funcionN()
dormir (x segundos)
En realidad el hilo no se ejecutará cada x segundos sino cada x + la suma de los tiempos de ejecución de cada función, y ese tiempo puede ser demasiado (hay conexiones de red involucradas, y sabemos que eso puede demorar)
Estoy trabajando con Python, y hasta ahora tengo un módulo central que carga varias clases diferentes que descienden de Thread (un "módulo" es, entonces, un objeto de esa clase). Así logro que cada módulo pueda ejecutarse por separado, pero no me funciona para el otro requisito (la ejecución "directa")
¿Sugerencias?