1

Pythonのようなサーバーサイドスクリプトを「永久に」(または状態を失うことなくできるだけ長く)実行する必要があります。そうすれば、ソケットを開いたままにして、受信したデータなどのイベントに非同期で反応できます。たとえば、ソケット通信にTwistedを使用する場合。

  • このようなものをどのように管理しますか?
  • 私は混乱していますか?または、非同期ソケット通信を実装するためのより良い方法はありますか?
  • Apacheサーバーを介してスクリプトを一度開始した後、スクリプトの実行を停止するにはどうすればよいですか?
4

5 に答える 5

3

ツイストを使用している場合は、デーモンを開始および停止するためのインフラストラクチャ全体があります。

http://twistedmatrix.com/projects/core/documentation/howto/application.html

このようなものをどのように管理しますか?

ツイストはこれに適しています。上のリンクをお読みください

私は混乱していますか?または、非同期ソケット通信を実装するためのより良い方法はありますか?

Twistedは、非同期ソケット通信に非常に優れています。あなたがそれのコツをつかむまで、それは脳に難しいです!

Apacheサーバーを介してスクリプトを一度開始した後、スクリプトの実行を停止するにはどうすればよいですか?

ツイストツールはコマンドラインアクセスを想定しているため、実行したいことを理解している場合は、ツールを開始/停止するためのcgiラッパーを作成する必要があります。

于 2009-09-16T07:36:21.023 に答える
1

接続が発生するのを待機し、信号が接続を閉じるのを待機するしばらくの間継続するスクリプトを作成するだけです。

http://docs.python.org/library/signal.html

次に、それを停止するには、その信号を彼に送信する別のスクリプトを実行する必要があります。

于 2009-09-15T13:08:09.367 に答える
1

'double fork'を使用して、古いプロセスにバインドされていない新しいバックグラウンドプロセスでコードを実行できます。たとえば、このレシピを参照して、必要以上に説明的なコメントを付けてください。

これをWebサイトのバックグラウンドタスクを実行する主要な方法としてはお勧めしません。たとえば、PythonがApacheプロセスに埋め込まれている場合、必要以上にフォークすることになります。デーモンを個別に呼び出すことをお勧めします(同様の低特権ユーザーのすぐ下)。

Apacheサーバーを介してスクリプトを一度開始した後、スクリプトの実行を停止するにはどうすればよいですか?

2番目のフォークにデーモンプロセスのプロセス番号(pid)をファイルに書き込んでから、そのファイルからpidを読み取り、終了信号(os.kill(pid, signal.SIG_TERM))を送信します。

私は混乱していますか?

それが問題です!ある種の異常なネットサービスのために、Webインターフェイスとは異なるポートで応答するバックグラウンドプロセスを作成しようとしていると想定しています。通常のWebリクエストへの応答について話しているだけの場合は、Apacheを使用してソケットを処理し、一度に1つのリクエストを処理する必要があります。

于 2009-09-15T13:17:21.483 に答える
0

コメットはあなたが探しているものだと思います。トルネードもぜひご覧ください。

于 2009-09-15T13:09:04.140 に答える
0

FastCGIを見たいと思うかもしれません、それはあなたが探しているものとまったく同じように聞こえますが、それが現在開発中であるかどうかはわかりません。CGIデーモンと特別なApacheモジュールを使用して通信します。デーモンは長時間実行されているため、フォーク/実行コストはかかりません。しかし、あなた自身のリソースを管理するためのコストとして(すべてのリクエストでautomagicのクリーンアップはありません)

このスタイルのFastCGIがあまり使用されなくなった理由の1つは、インタープリターをApacheバイナリに埋め込み、サーバーで実行する方法があるためです。私はmod_pythonに精通していませんが、mod_perlには長時間実行されるプロセスを許可する構成があることは知っています。サーバーで長時間実行されているプロセスはリソースリークを引き起こす可能性があるため、ここでは注意してください。

一般的な質問は次のとおりです。あなたは何をしたいですか?なぜこの2番目のプロセスが必要なのに、どういうわけかapacheによって制御されているのでしょうか。なぜapacheと通信するデーモンを構築できないのですか、なぜapacheによって制御する必要があるのですか?

于 2009-09-15T21:38:08.713 に答える