ホームページ > バックエンド開発 > Python チュートリアル > Flask Dev サーバーに 2 回の再起動メッセージが表示されるのはなぜですか?

Flask Dev サーバーに 2 回の再起動メッセージが表示されるのはなぜですか?

Barbara Streisand
リリース: 2024-12-07 15:44:11
オリジナル
639 人が閲覧しました

Why Does My Flask Dev Server Show a Double Restart Message?

Flask 開発サーバーでの二重再起動の出力

Flask を使用して Web サイト開発サーバーを実行しているときに、サーバーが再起動される異常な動作にユーザーが気づきました。メッセージが 1 回ではなく 2 回表示されます。この背後にある理由を理解するために、Flask の開発サーバーの仕組みを詳しく見てみましょう。

Flask は、WSGI ユーティリティ ライブラリである Werkzeug を利用して、app.run() メソッドを通じて開発サーバーを起動します。 Werkzeug は「リロード」と呼ばれる手法を採用し、コードの変更を検出するとサーバーを自動的に再起動します。リロード プロセスには、subprocess.call() を使用して Flask スクリプトを再度実行する子プロセスの生成が含まれます。

この子プロセスは親プロセスと同じコードを想定しており、再起動メッセージが二重に実行されます。この動作を排除するには、app.run() の use_reloader パラメータを False に設定します。あるいは、Flask のコマンドライン実行中にリローダーを無効にします:

FLASK_DEBUG=1 flask run --no-reload
ログイン後にコピー

リロード中の子プロセスの存在を検出することが重要である高度なシナリオの場合は、Werkzeug の is_running_from_reloader() 関数を利用します。ただし、モジュール グローバルの初期化には @app.before_first_request デコレータを利用し、各リロード後の 1 回の実行を保証することをお勧めします。

@app.before_first_request
def before_first_request():
    print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
ログイン後にコピー

本格的な WSGI では、before_first_request ハンドラが新しいサブプロセスごとに呼び出される可能性があることに注意してください。フォークまたは新しいサブプロセスを使用するサーバー。

以上がFlask Dev サーバーに 2 回の再起動メッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート