Python удерживает активную веб-страницу

Я пытаюсь, чтобы набор сценариев Python сообщал о своем статусе набору микроконтроллеров.

Итак, моя идея для этого состоит в том, чтобы каждый скрипт python создавал свою собственную веб-страницу, которую можно было бы просматривать микроконтроллерами, но в любом случае есть ли сам скрипт, поддерживающий обслуживание страницы, то есть библиотека apache, чтобы в случае сбоя скрипта или не работает, страница не обслуживается, или способ задать странице значение по умолчанию, если скрипт не запущен.


person Jonny Flowers    schedule 16.05.2012    source источник


Ответы (2)


Вы также можете ознакомиться с twisted.web.

Очень простой пример:

from twisted.web.server     import Site
from twisted.web.resource   import Resource
from twisted.internet       import reactor

class StatusPageResource(Resource):
    isLeaf           = True

    def __init__(self, param1):
        self.param1 = param1
        # Call the constructor of the super class
        Resource.__init__(self)

    def render_GET(self, request):
        return "<html><body>%s</body></html>" % self.param1


my_res = Resource()
my_res.putChild('GetStatusPage1', StatusPageResource(param1='abc'))
my_res.putChild('GetStatusPage2', StatusPageResource(param1='xyz'))

factory = Site(my_res)
reactor.listenTCP(8080, factory)
print 'Runnning on port 8080'
reactor.run()

Теперь укажите в браузере http://localhost:8080/GetStatusPage1 (например)

person E.Z.    schedule 16.05.2012
comment
Я пробовал это и не мог заставить его работать должным образом, он выдал огромное количество ошибок. Спасибо, в любом случае - person Jonny Flowers; 17.05.2012
comment
@Jonny Flowers: это прекрасно работает в моей среде. Тупой вопрос: у тебя вообще крутили? Это не часть стандартной библиотеки Python... - person E.Z.; 18.05.2012
comment
У меня его не было, поэтому скачал его, и код, который вы мне дали, выдал кучу вещей об использовании неправильных экземпляров. - person Jonny Flowers; 19.05.2012
comment
Множество сообщений об использовании вместо этого декоратора класса @implementor. Есть идеи? Но страницы размещаются. - person Jonny Flowers; 19.05.2012
comment
Кроме того, как мне заставить его продолжать другие действия после этого. Я хочу, чтобы веб-сервер сообщил, запущена ли остальная часть скрипта. Текущая функция заключается в том, что он прослушивает данные, а затем помещает их в базу данных. - person Jonny Flowers; 19.05.2012
comment
Привет @Джонни. Я не уверен, что полностью понял ваши требования, но, возможно, вам нужно запустить остальную часть скрипта в отдельном потоке, в то время как часть веб-сервера, использующая twisted, используется для сообщения о каком-то статусе? Если это так, вы можете взглянуть на поточность модуль. - person E.Z.; 21.05.2012
comment
О, хорошо, насколько я понимаю из этого, я бы создал еще один процесс, который работает одновременно, чтобы в случае сбоя одного из них оба останавливались? - person Jonny Flowers; 22.05.2012
comment
Хм, не совсем так: все будет работать в одном python процессе, но в разных потоки. Если поток выходит из строя, другие не обязательно должны быть затронуты; например, если поток, выполняющий остальную часть вашего скрипта, выйдет из строя, тот, в котором запущен ваш twisted.web сервер, вероятно, все еще будет отвечать на ваши HTTP-запросы. Точное поведение будет зависеть от того, как вы спроектируете свое решение. - person E.Z.; 22.05.2012
comment
Ох, хорошо. Я бы хотел, чтобы, если мой скрипт выйдет из строя, веб-сервер придет вместе с ним. - person Jonny Flowers; 22.05.2012

Вы можете использовать http://docs.python.org/library/simplehttpserver.html или некоторая минимальная структура http-сервера, такая как http://flask.pocoo.org/ или http://www.cherrypy.org/.

Если вы хотите передавать «живую» информацию на свои микроконтроллеры, также взгляните на comet style длинные запросы на опрос. По сути, вы постоянно загружаете «страницу» и анализируете ее как поток данных, в то время как сервер продолжает добавлять обновленную информацию в «конец страницы».

person snies    schedule 16.05.2012
comment
Simplehttpserver, кажется, путь вперед, однако есть способ внедрить его в мой код, чтобы сделать его неблокирующим, поскольку я хочу, чтобы он был первым, что он делает, и в данный момент он ожидает распечатки каждый раз, когда кто-то обращается к странице , меня это не волнует, могу ли я отключить это? - person Jonny Flowers; 17.05.2012
comment
может помочь этот вопрос о стеке: stackoverflow.com/questions/2455606/ - person snies; 17.05.2012