為什麼 Flask 開發伺服器似乎運行了兩次
在 Flask 中,Werkzeug 庫為開發伺服器提供了 app.run()。每次更新程式碼時,Werkzeug 都會利用重新載入器重新啟動進程。此重新載入器會產生子進程,導致腳本使用 subprocess.call() 再次執行。
當您執行開發伺服器時,腳本將由原始進程和子進程執行,從而導致重複的列印行。
停用重新載入器
要消除額外的執行,您可以停用透過在 app.run() 中將 use_reloader 設為 False 來重新載入。這將阻止自動重新加載,但也會停用即時重新加載功能。
或者,您可以使用帶有 --no-reload 選項的 Flask run 指令。
偵測子進程
如果需要區分原始進程和子進程,可以使用werkzeug.serving.is_running_from_reloader 函數,如果您處於子進程中,則傳回 True。
設定模組全域變數
用於在網路的整個生命週期中設定模組全域變數伺服器,考慮使用 @app.before_first_request 裝飾器。此裝飾器適用於僅在每次重新載入後、收到第一個請求時執行一次的函數。
WSGI 伺服器的注意事項
如果您部署在使用分叉或新子程序的WSGI 伺服器上的應用程式中,before_first_request 處理程序可能會被多次調用,每個新進程調用一次過程。
以上是為什麼我的 Flask 開發伺服器似乎運行了兩次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!