2

httpリクエストハンドラーの一部として実行される、長時間実行されるpython関数があります(フォームで選択されたさまざまなオプションに関連付けられています)。

http 要求ハンドラーは、関数の実行が完了するのを待ってから、発信元に適切な応答を返します。

ただし、関数の実行には時間がかかる場合があるため、その間にリクエストが中断される可能性があります。これにより、リクエスト ハンドラが停止し、実行時間の長い関数の実行が中断されます。これは望ましくありません。関数が呼び出されるたびに実行が完了するようにしたいのです。

サブプロセスを使用して遊んだことがありますが、リクエスト ハンドラーが終了するとすぐに終了するようです。

別のスレッドまたはプロセスで関数を起動して、その親よりも長く存続できるようにすることはできますか?


デーモンはおそらく私の問題を部分的に解決しているようです-それらは親よりも長生きできますか? -しかし、親プロセスが子プロセスの結果を監視/アクセスできるようにしたいと思います。

あれは:

  • 親プロセス、子プロセスより先に終了する場合があります。この場合、子プロセスを完了させたい
  • 親プロセスがまだ生きている限り、子プロセスにアクセスしたり、監視したりしたいと思います...親プロセスが死なない場合は、アクセスできるようにしたいと思います子供が行っていた処理の結果。
4

1 に答える 1

1

ハンドラーを新しいスレッドとして開始すると、メイン スレッドが存在する場合でもハンドラーを実行したままにするデーモンとして実行できます。メイン スレッドはデーモン スレッドではないため、開始する前に、このプロパティを子に対して明示的に設定する必要があります。

マニュアルから:

スレッドは「デーモンスレッド」としてフラグを立てることができます。このフラグの意味は、デーモン スレッドだけが残ったときに Python プログラム全体が終了することです。初期値は作成スレッドから継承されます。フラグはデーモン プロパティを介して設定できます。

注: デーモン スレッドは、シャットダウン時に突然停止します。それらのリソース (開いているファイル、データベース トランザクションなど) が適切に解放されない可能性があります。スレッドを正常に停止させたい場合は、スレッドを非デーモンにし、イベントなどの適切なシグナル メカニズムを使用します。

于 2013-09-19T17:58:38.850 に答える