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 サイトの他の関連記事を参照してください。