Pergunta

Eu tenho um aplicativo Python que é daemonizado e executado em um servidor 24 horas por dia, 7 dias por semana.Eu gostaria de poder fornecer uma interface web incrivelmente simples para poder monitorar as alterações de valores de algumas variáveis ​​dentro do programa.

Estou usando o Tornado e estou funcionando com o simples 'Olá, mundo' que você pode encontrar no Página inicial do Tornado.Contudo, assim que tornado.ioloop.IOLoop.instance().start() é chamado, entra no loop e não retorna.Meu programa existente também é (essencialmente) um loop infinito, mas quero integrar os dois.

Então, minha pergunta é:como posso construir meu programa para poder monitorar variáveis ​​dentro de meu loop infinito usando o Tornado para fornecer uma interface web?

Foi útil?

Solução

É possível usar o threading empacotar e executar o Tornado dentro de seu próprio thread?

Editar:

O threading documentação do módulo em http://docs.python.org/library/threading.html tem mais detalhes, mas estou imaginando algo assim:

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

Deixe-me saber se isso funciona!

Outras dicas

Acredito que o melhor (leia:A abordagem mais fácil) seria fazer com que seu aplicativo daemon escrevesse essas variáveis ​​específicas que você deseja monitorar em um espaço compartilhado que seu aplicativo tornado possa acessar.Pode ser um arquivo, um soquete, um banco de dados ou um armazenamento de valores-chave.Algumas idéias que vêm à mente são usar seu banco de dados existente (se houver), sqlite ou até mesmo memcached.Então, você simplesmente faria com que seu aplicativo tornado lesse esses valores de onde quer que você os armazenasse.

Você está certo nisso depois de executar tornado.ioloop.IOLoop.instance().start() o fluxo de controle do tornado nunca retorna desse loop.Desse ponto em diante, o controle do seu aplicativo permanecerá dentro do Application e dos RequestHandlers que você definiu.

Outra solução menos elegante seria utilizar o yaml para serializar os objetos periodicamente do seu aplicativo principal e fazer com que o aplicativo da web os leia.Você pode até despejar objetos no yaml para ver os diferentes estados deles.

Você poderia tentar usar http://www.zeromq.org/ como meio de comunicação entre os dois processos/threads.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top