给我的Python应用程序一个网络界面以监控它,使用Tornado
我有一个用Python写的应用程序,它在服务器上全天候运行。现在我想要一个非常简单的网页界面,这样我就可以监控程序里几个变量的变化。
我正在使用Tornado框架,并且已经成功运行了Tornado主页上提供的简单“你好,世界”示例。不过,一旦我调用了tornado.ioloop.IOLoop.instance().start()
,程序就会进入一个循环,无法返回。我的程序本身也是一个无限循环,但我想把这两个结合起来。
所以,我的问题是:我该如何构建我的程序,以便通过Tornado提供的网页界面来监控我无限循环中的变量呢?
4 个回答
还有一种不太优雅的解决方案,就是定期使用yaml格式把你的主应用中的对象保存下来,然后让网页应用读取这些数据。你甚至可以把对象直接转换成yaml格式,这样就能看到这些对象的不同状态。
我觉得最简单的方法就是让你的后台程序把你想要监控的那些变量写到一个共享的地方,这样你的tornado应用就可以访问到。这可以是一个文件、一个套接字、一个数据库,或者一个键值存储。比如,你可以考虑用你现有的数据库(如果有的话)、sqlite,甚至是memcached。然后,你只需要让你的tornado应用从你存储这些值的地方读取它们就行了。
你说得对,一旦你运行了 tornado.ioloop.IOLoop.instance().start()
,tornado的控制流程就不会再从这个循环中返回了。从那时起,你的应用控制会一直停留在你定义的应用和请求处理器中。
可以使用 threading
这个包,在自己的线程里运行 Tornado 吗?
补充说明:
threading
模块的文档在 http://docs.python.org/library/threading.html 上有更多详细信息,但我想象的情况是这样的:
import threading
t = threading.Thread(target = tornado.ioloop.IOLoop.instance().start)
t.start()
如果这样可行,请告诉我!