Предоставление моему приложению Python веб-интерфейса для мониторинга с помощью Tornado - PullRequest
6 голосов
/ 28 октября 2010

У меня есть приложение Python, которое демонизировано и работает на сервере 24/7.Я хотел бы иметь возможность предоставить невероятно простой веб-интерфейс, чтобы я мог отслеживать изменяющиеся значения нескольких переменных в программе.

Я использую Tornado, и я работаю с простым 'Hello, world', который вы можете найти на домашней странице Tornado .Однако, как только вызывается tornado.ioloop.IOLoop.instance().start(), он входит в цикл и не возвращается.Моя существующая программа (по сути) также является бесконечным циклом, но я хочу интегрировать их.

Итак, мой вопрос: как я могу построить свою программу, чтобы я мог отслеживать переменные внутри моего бесконечного цикла с помощьюиспользование Tornado для предоставления веб-интерфейса?

Ответы [ 4 ]

4 голосов
/ 01 ноября 2010

Можно ли использовать пакет threading и запускать Tornado внутри собственного потока?

Редактировать:

Документация модуля threading в http://docs.python.org/library/threading.html имеет больше деталей, но я представляю что-то вроде этого:

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

Дайте мне знать, если это работает!

2 голосов
/ 28 октября 2010

Я считаю, что лучшим (читай: самым простым) подходом было бы, чтобы ваше приложение-демон записывало те конкретные переменные, которые вы хотите отслеживать, в общий интервал, к которому ваше приложение-торнадо может получить доступ.Это может быть файл, сокет, база данных или хранилище значений ключей.Некоторые идеи, которые приходят на ум, - это использовать вашу существующую базу данных (если она есть), sqlite или даже memcached.Тогда ваше приложение торнадо просто прочитало бы эти значения из того места, где вы их сохранили.

Вы правы в том, что когда вы запустите tornado.ioloop.IOLoop.instance().start() поток управления торнадо никогда не вернется из этого цикла.С этого момента управление вашим приложением будет оставаться в пределах определенных вами Application и RequestHandlers.

0 голосов
/ 27 августа 2011

Вы можете попробовать использовать http://www.zeromq.org/ в качестве средства связи между двумя процессами / потоками.

0 голосов
/ 28 октября 2010

Еще одним менее элегантным решением было бы использование yaml для периодической сериализации объектов из вашего основного приложения, и чтобы веб-приложение считывало их. Вы даже можете выгружать объекты в yaml, чтобы вы могли видеть их различные состояния.1001 *

...