Domanda

Ho un'applicazione Python che viene daemonized e in esecuzione su un server di 24/7. Mi piacerebbe essere in grado di dare un incredibilmente semplice interfaccia web in modo da poter monitorare i valori mutevoli di alcune variabili all'interno del programma.

sto usando Tornado, e sono installato e funzionante con il semplice 'Ciao, mondo' che si possono trovare sul Tornado homepage . Tuttavia, non appena tornado.ioloop.IOLoop.instance().start() viene chiamato, entra nel ciclo e non ritorna. Il mio programma esistente è (essenzialmente) un ciclo infinito così, ma voglio di integrare i due.

Quindi, la mia domanda è: come posso costruire il mio programma in modo che possa monitorare le variabili all'interno del mio ciclo infinito utilizzando Tornado per fornire un'interfaccia web

È stato utile?

Soluzione

E 'possibile utilizzare il pacchetto threading ed eseguire Tornado all'interno del proprio thread?

Modifica

La documentazione del modulo threading a http://docs.python.org/library/threading.html ha più dettagli, ma sto immaginando qualcosa di simile:

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

Fammi sapere se funziona!

Altri suggerimenti

Credo che la migliore (leggi: più semplice) approccio sarebbe quello di avere il demone app scrittura quelle variabili particolari che si desidera monitorare fuori ad una condivisa distanziati che il tornado accesso applicazione può. Questo potrebbe essere un file, una presa, un database, o negozio di valori-chiave. Alcune idee le idee che vengono in mente è quello di utilizzare il database esistente (se ce n'è uno,) SQLite, o addirittura memcached. Poi, si sarebbe semplicemente avere l'applicazione tornado leggere quei valori da ovunque li memorizzato.

Sei corretta in quanto, una volta che si esegue il controllo di flusso tornado.ioloop.IOLoop.instance().start() del tornado non restituisce mai da quel ciclo. Da quel punto in avanti, il controllo dell'applicazione rimarrà all'interno del Applicazione e RequestHandlers che si è definito.

Un'altra soluzione meno elegante sarebbe quella di utilizzare YAML per serializzare gli oggetti periodicamente dalla tua applicazione principale, e hanno la web app leggere quelli. È anche possibile scaricare gli oggetti in YAML, così si potrebbe vedere i diversi stati di quelli.

Si potrebbe provare a utilizzare http://www.zeromq.org/ come un mezzo di comunicazione tra ai due processi / thread.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top