Flaskを使用してPythonWebアプリケーションを作成しています。私のアプリケーションは起動時に別のサーバーへの接続を確立し、バックグラウンドで定期的にそのサーバーと通信します。
Flaskの組み込みデバッガー(debug = Falseでapp.runを呼び出す)を使用しない場合は、問題ありません。
組み込みのデバッガーを使用する場合(debug = Trueでapp.runを呼び出す)、Flaskは同じコードで2番目のPythonプロセスを開始します。最終的にHTTP接続をリッスンし、アプリケーションが想定どおりに動作するのは子プロセスであり、デバッガーが起動したときに親が監視するためにそこにいると思います。
しかし、これは両方のプロセスで実行される私のスタートアップコードに大混乱をもたらします。最終的に、外部サーバーへの2つの接続、同じログファイルへの2つのプロセスのログ記録が発生し、通常、それらは相互にトリップします。
app.run()を呼び出す前に実際の作業を行うべきではないと思いますが、この初期化コードをどこに置くべきですか(デバッガーモードに関係なく、Flaskプロセスグループごとに1回だけ実行したいのですが、必要です起動時に実行し、クライアントの要求とは無関係に実行しますか?
「Flaskの自動リロードと長時間実行スレッド」に関するこの質問は、多少関連していますが、多少異なり、答えは役に立ちませんでした。(私もデーモンスレッドとしてマークされた別の長時間実行スレッドを持っていますが、リローダーが起動すると強制終了されますが、解決しようとしている問題は、リロードが発生する前です。私は関係ありません。リロード;私は余分なプロセスと、親プロセスで不要なコードを実行しないようにする正しい方法に関心があります。)