Pregunta

Tengo una aplicación Python que está endemoniada y que se ejecuta en un servidor 24/7. Me gustaría ser capaz de dar una interfaz web muy simple para que pueda controlar el cambio de valores de algunas variables dentro del programa.

Estoy usando Tornado, y estoy en marcha con el simple 'Hola, mundo' que se pueden encontrar en la Tornado página . Sin embargo, tan pronto como tornado.ioloop.IOLoop.instance().start() se llama, entra en el bucle y no vuelve. Mi programa existente es (esencialmente) un bucle infinito también, pero quiero integrar los dos.

Por lo tanto, mi pregunta es: ¿cómo puedo construir mi programa para que pueda monitorear variables dentro de mi bucle infinito mediante el uso de Tornado para proporcionar una interfaz web

¿Fue útil?

Solución

¿Es posible utilizar el paquete threading y ejecutar Tornado en el interior de su propio hilo?

Editar

La documentación del módulo threading en http://docs.python.org/library/threading.html tiene más detalles, pero estoy imaginando algo como esto:

import threading
t = threading.Thread(target = tornado.ioloop.IOLoop.instance().start)
t.start()

Avísame si funciona!

Otros consejos

Creo que la mejor (es decir: más fácil) enfoque sería tener su aplicación demonio de escribir esas variables particulares que desea supervisar a un espaciado de que su aplicación puede tornado acceso compartido. Esto podría ser un archivo, un enchufe, una base de datos o almacén de claves-valor. Algunas ideas ideas que vienen a la mente es el uso de su base de datos existente (si lo hay), SQLite, o incluso memcached. Entonces, sólo tendría que tener su aplicación tornado leer esos valores desde el lugar en el que estuvieran almacenadas.

Tiene usted razón en que una vez que se ejecuta el control de tornado.ioloop.IOLoop.instance().start() tornado flujo sin retornos de ese bucle. A partir de ese punto en adelante, el control de la aplicación se mantendrá dentro de la Solicitud y RequestHandlers que ha definido.

Otra solución menos elegante sería utilizar yaml para serializar los objetos periódicamente de su aplicación principal, y tener la aplicación web leer los de. Incluso puede volcar objetos en yaml, por lo que se podía ver los diferentes estados de los.

Se podría tratar de usar http://www.zeromq.org/ como un medio de comunicación entre a los dos procesos / hilos.

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