Flask 開發伺服器中的雙重重啟列印輸出
使用Flask 執行網站開發伺服器時,使用者註意到伺服器重啟的異常行為訊息伺服器出現兩次而不是一次。為了理解這背後的原因,讓我們深入研究 Flask 開發伺服器的機制。
Flask 利用 Werkzeug(一個 WSGI 實用程式庫)透過 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 裝飾器來初始化模組全域變量,保證每次重新載入後執行一次。
@app.before_first_request def before_first_request(): print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
請注意,在完整的 WSGI 中,可能會為每個新子程序呼叫 before_first_request 處理程序使用分叉或新子程序的伺服器。
以上是為什麼我的 Flask 開發伺服器顯示雙重重啟訊息?的詳細內容。更多資訊請關注PHP中文網其他相關文章!