[解決済み] Flaskの開発サーバーを実行すると、なぜ2回実行されるのですか?
質問
を使っています。 フラスコ で、開発中に以下のファイルを使ってflaskを動かしています。
#!/usr/bin/env python
from datetime import datetime
from app import app
import config
if __name__ == '__main__':
print('################### Restarting @', datetime.utcnow(), '###################')
app.run(port=4004, debug=config.DEBUG, host='0.0.0.0')
サーバーを起動したとき、またはファイルが更新されたために自動再起動したとき、必ず印刷行が2回表示されます。
################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################
特に問題はないのですが(他は期待通りに動作します)、なぜこのような挙動になるのか、単純に疑問です。何か思い当たることはありますか?
解決方法は?
Werkzeug リローダは子プロセスを生成し、コードが変更されるたびにそのプロセスを再開できるようにします。Werkzeug は、Flask に開発サーバーを提供するためのライブラリです。
app.run()
.
をご覧ください。
restart_with_reloader()
関数コード
スクリプトが実行されると
再び
で
subprocess.call()
.
を設定した場合
use_reloader
から
False
を実行すると、この動作はなくなりますが、リロードの機能も失われます。
app.run(port=4004, debug=config.DEBUG, host='0.0.0.0', use_reloader=False)
を使用する場合、リローダを無効にすることができます。
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
def before_first_request():
print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
これを、リクエストを処理するためにフォークや新しいサブプロセスを使用する本格的な WSGI サーバで実行する場合、以下のことを考慮してください。
before_first_request
ハンドラ
かもしれません。
は、新しいサブプロセスごとに呼び出されます。
関連
-
ピロウズ画像色処理の具体的な活用方法
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Python百行で韓服サークルの画像クロールを実現する
-
任意波形を生成してtxtで保存するためのPython実装
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み] なぜPythonのコードは関数の中でより速く実行されるのですか?
-
[解決済み] Flaskの開発サーバーをネットワーク上で見えるように設定する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み] デバッグモードでFlaskが2回初期化されないようにするには?重複