7

我有一个 Python 应用程序,它被守护并在服务器 24/7 上运行。我希望能够提供一个非常简单的 Web 界面,以便我可以监控程序中一些变量的变化值。

我正在使用 Tornado,并且可以在Tornado 主页上找到简单的“Hello, world”并开始运行。但是,一旦tornado.ioloop.IOLoop.instance().start()被调用,它就会进入循环并且不会返回。我现有的程序(本质上)也是一个无限循环,但我想将两者结合起来。

所以,我的问题是:如何构建我的程序,以便通过使用 Tornado 提供 Web 界面来监视无限循环中的变量?

4

4 回答 4

4

是否可以使用该threading软件包并在其自己的线程中运行 Tornado?

编辑:

http://docs.python.org/library/threading.html上的threading模块文档有更多细节,但我想像这样:

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

让我知道这是否有效!

于 2010-11-01T00:15:48.887 回答
2

我相信最好的(阅读:最简单的)方法是让您的守护程序应用程序将您想要监控的那些特定变量写入您的龙卷风应用程序可以访问的共享空间。这可以是文件、套接字、数据库或键值存储。想到的一些想法是使用您现有的数据库(如果有的话)sqlite,甚至是memcached。然后,您只需让您的 tornado 应用程序从您存储它们的任何位置读取这些值。

你是正确的,一旦你运行tornado.ioloop.IOLoop.instance().start()龙卷风的控制流就永远不会从那个循环中返回。从那时起,您的应用程序的控制权将保留在您定义的 Application 和 RequestHandlers 中。

于 2010-10-28T13:26:45.757 回答
0

另一个不太优雅的解决方案是利用 yaml 从您的主应用程序中定期序列化对象,并让 Web 应用程序读取这些对象。您甚至可以将对象转储到 yaml 中,这样您就可以看到它们的不同状态。

于 2010-10-28T13:58:02.177 回答
0

您可以尝试使用http://www.zeromq.org/作为两个进程/线程之间的通信方式。

于 2011-08-27T16:47:08.687 回答