2

私の設定は次のとおりです-「hello world」の例に近いTornadoベースのHTTPサーバーがあります。

server = tornado.httpserver.HTTPServer(app)
server.bind(8888)
server.start(2)
tornado.ioloop.IOLoop.instance().start()

この設定では、ルート プロセスによって生成された別のプロセス (制御プロセスと呼びましょう) もあります。したがって、この制御プロセスは 2 つの Tornado ハンドラ プロセスの兄弟です。もちろん、ルート プロセスによって作成されたパイプを介して、ハンドラ プロセスと制御プロセスの間で通信できます。ただし、制御プロセスのメソッドを呼び出してその出力を取得することにもっと興味があります。

そのようなことを行うための最良のアプローチは何ですか? パイプを使用してハンドラーからコントロールにリクエストを送信し、結果を返す場合、ロックを使用してプロセスの安全性を実装する必要がありますか?

4

1 に答える 1

1

パイプでロックする必要はありません。パイプは独自の同期です。別の言い方をすれば、パイプの両側は別々のオブジェクトです。

(もちろん、制御プロセスは内部的にロックを必要とする場合があります。たとえば、メイン イベント ループとは異なるスレッドからパイプを処理し、メイン ループで実行されるコードとデータを共有する必要がある場合などです。プロセスの安全性。)

とにかく、一歩下がってより高いレベルからこれについて考えると、実装しているのは RPC メカニズムの正確な定義です。control実行していることが十分に単純な場合は、この方法でゼロから実装しても問題ありませんが、そうでない場合は、別のプロトコルを追加して、Tornado に既存のプロトコルと一緒に管理させたい場合があります。

于 2013-02-05T22:04:32.350 に答える