0

Tornado を使用して Web リクエストを処理し、タスクを一連の Python プロセスにキューイングする設定があります。これらのプロセスの 1 つは制御プロセスで、その他はワーカー プロセスです。このサーバーの計算部分をオフにしたり、再起動したりできる機能を実装したいと考えています。これは、Tornado が単一のプロセスとして実行されている場合に完全に機能します。ただし、複数のサーバー プロセスを使用する場合は、次のようになります。

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

これにより、3 つのプロセス (1 つのコントロールと 2 つのハンドラー) が生成されます。計算プロセスを停止しようとすると、エラーが発生します。

AssertionError: can only join a child process

これは、Tornado ハンドラー プロセスが計算プロセスを停止しようとしていると解釈しますが、Tornado コントロールはその親です。

コントロール コンピューティング プロセスに停止メッセージを送信できるように、パイプを使用することを考えています。

そして2番目の質問として、私のアプローチ/アーキテクチャは完全に間違っていますか?適切なアプローチ/アーキテクチャは何ですか?

4

1 に答える 1

0

を支援するために、より多くのサンプルコードを含める必要があると思いますAssertionError。ただし、基本的には、新しいスレッドまたはプロセスを作成するスレッドのみが参加できます(メッセージが示すように)。

sに関してPipeは、2つのパイプ(サブプロセスごとに1つ)を作成できます。これは、メッセージが1つで読み取られると、他のパイプでは使用できなくなるためです。tornado.web.Handlersアイテムはとの間で共有できますtornado.web.RequestHandler.settings

ただし、リクエストに対してハンドラーが作成されることに注意してください。しかし、バックグラウンド処理に使用しているように思われますか?その場合は、キューを彼らと共有して「毒殺」するだけです。

于 2013-02-19T19:37:33.943 に答える