7

デーモン化され、サーバー上で 24 時間 365 日実行されている Python アプリケーションがあります。プログラム内のいくつかの変数の値の変化を監視できるように、非常にシンプルな Web インターフェイスを提供できるようにしたいと考えています。

私は Tornado を使用しており、Tornado のホームページにあるシンプルな「Hello, world」で起動して実行しています。ただし、呼び出されるとすぐにtornado.ioloop.IOLoop.instance().start()ループに入り、戻りません。私の既存のプログラムも (本質的に) 無限ループですが、2 つを統合したいと考えています。

それで、私の質問は次のとおりです。Tornado を使用して Web インターフェイスを提供することにより、無限ループ内の変数を監視できるようにプログラムを構築するにはどうすればよいですか?

4

4 に答える 4

4

threadingパッケージを使用して独自のスレッド内で Tornado を実行することは可能ですか?

編集:

http://docs.python.org/library/threading.htmlthreadingモジュールのドキュメントに詳細がありますが、私は次のようなものを想像しています:

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

2 つのプロセス/スレッド間の通信手段としてhttp://www.zeromq.org/を使用してみることができます。

于 2011-08-27T16:47:08.687 に答える
0

もう 1 つの洗練されていない解決策は、yaml を使用してメイン アプリからオブジェクトを定期的にシリアル化し、Web アプリにそれらを読み込ませることです。オブジェクトを yaml にダンプすることもできるため、それらのさまざまな状態を確認できます。

于 2010-10-28T13:58:02.177 に答える