ホームページ >バックエンド開発 >Python チュートリアル >Flask 開発サーバーが 2 回実行されているように見えるのはなぜですか?
Flask 開発サーバーが 2 回実行される: 理由を明らかにする
Flask 開発サーバーは、コードに変更が加えられるたびにアプリケーションの再起動を処理します。 。この機能は、Werkzeug ライブラリの restart_with_reloader() 関数によって提供されます。
この関数は子プロセスを生成し、subprocess.call() を使用してスクリプトを再度実行します。その結果、元のスクリプトと子プロセスの両方が再起動メッセージを 1 回ずつ出力し、二重出力動作が観察されます。
リローダーを無効にします
この動作を排除するには、 use_reloader を False に設定してリローダーを無効にします:
app.run(port=4004, debug=config.DEBUG, host='0.0.0.0', use_reloader=False)
または、 --no-reload フラグを指定した flask run コマンド:
FLASK_DEBUG=1 flask run --no-reload
リローダー プロセスを検出する
werkzeug.serving.is_running_from_reloader() 関数を使用して、子プロセス:
from werkzeug.serving import is_running_from_reloader if is_running_from_reloader(): print(f"################### Restarting @ {datetime.utcnow()} ###################")
を使用します@app.before_first_request デコレータ
モジュール グローバルを設定する必要がある場合は、@app.before_first_request デコレータの使用を検討してください。
@app.before_first_request def before_first_request(): print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
このデコレータは、リロードのたびに関数を 1 回実行します。最初のリクエストのとき
注:
フォークまたはサブプロセスを使用してリクエストを処理する本格的な WSGI サーバーでは、サブプロセスごとに before_first_request ハンドラーが呼び出される場合があります。
以上がFlask 開発サーバーが 2 回実行されているように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。