Pythonでホットコードスワップを実行できるツイストサーバーを構築する方法は?

StackOverflow https://stackoverflow.com/questions/4864380

  •  27-10-2019
  •  | 
  •  

質問

オーディオストリーミングサーバーのセットを開発しましたが、それらはすべてTwistedを使用しており、もちろんPythonにあります。彼らは動作しますが、問題は私を悩ませ続けます。実行中のサーバーでいくつかのバグを見つけたとき、またはサーバーに何かを追加したいので、それらを停止して開始する必要があります。 HTTPサーバーとは異なり、いつでも再起動しても大丈夫ですが、オーディオストリーミングサーバーでは大丈夫ではありません。ストリーミングサーバーを再起動すると、ユーザーが切断に遭遇することを意味します。

マンホール(ツイストサーバー用のSSHサービス、コンソールのPythonコードをログインして入力して何かをすることができます)をセットアップし、コンソールに接続して、その場でPythonモジュールをリロードします。それは時々動作しますが、制御するのは難しいです。サーバーには古いクラスのインスタンスがいくつあるかはわかりませんが、それらのいくつかは到達するのが難しく、クラスの関係は非常に複雑です。また、状況によっては動作する場合がありますが、たとえばサーバーを再起動する必要がある場合があります。たとえば、セレクターリアクターでサーバーを実行しており、代わりにEpoll Reactorで実行したい場合は、再起動する必要があります。別の例は、メモリの使用量が高すぎる場合、それらも再起動する必要があります。

そのようなシステムを構築するために、私は自分の頭の中にアイデアが来ることがあります、私はそれらの接続とデータをプロセスから別のデータに引き渡すことができると考えています。例えば:

放送という名前のサーバーがあり、実行中のインスタンスはRev.123の下にあり、Rev.124に置き換えたいと思います。

Broadcasting rev.123 is running....
Startup Broadcasting rev.124 ....
Broadcasting rev.124 is stand by
Hand over connections from instance of rev.123 to instance of rev.124
Stop Broadcasting rev. 123 instance

これは可能ですか?プロセスにバインドされているかどうかにかかわらず、ソケットハンドルの寿命があるとは考えていません。プロセスによって作成されたソケットは、作成者のプロセスが殺されたときに閉じられると思いましたが、確かではありません。可能であれば、このようなホットコード交換メカニズムを設計するためのガイドラインや記事はありますか?そして、私がすでにやっているために私が望むものを達成できる何かがすでに行われていますか?

ありがとう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top