Flask Development Server wird zweimal ausgeführt: Der Grund wird enthüllt
Der Flask Development Server übernimmt den Neustart Ihrer Anwendung, wenn Änderungen an Ihrem Code vorgenommen werden . Diese Funktionalität wird durch die Funktion restart_with_reloader() der Werkzeug-Bibliothek bereitgestellt.
Diese Funktion erzeugt einen untergeordneten Prozess und führt Ihr Skript erneut mit subprocess.call() aus. Folglich drucken sowohl das ursprüngliche Skript als auch der untergeordnete Prozess die Neustartmeldung jeweils einmal, was zu dem beobachteten Doppeldruckverhalten führt.
Deaktivieren Sie den Reloader
Um dieses Verhalten zu beseitigen , deaktivieren Sie den Reloader, indem Sie use_reloader auf False setzen:
app.run(port=4004, debug=config.DEBUG, host='0.0.0.0', use_reloader=False)
Alternativ können Sie den Befehl flask run mit dem verwenden --no-reload Flag:
FLASK_DEBUG=1 flask run --no-reload
Erkennen Sie den Reloader-Prozess
Verwenden Sie die Funktion werkzeug.serving.is_running_from_reloader(), um den untergeordneten Prozess zu erkennen:
from werkzeug.serving import is_running_from_reloader if is_running_from_reloader(): print(f"################### Restarting @ {datetime.utcnow()} ###################")
Verwenden Sie @app.before_first_request Dekorator
Wenn Sie Modulglobale festlegen müssen, sollten Sie den Dekorator @app.before_first_request verwenden:
@app.before_first_request def before_first_request(): print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
Dieser Dekorator führt die Funktion einmal nach jedem Neuladen aus, wenn die erste Anfrage erfolgt hergestellt wird.
Hinweis:
In Originalgröße WSGI-Server, die Forking oder Unterprozesse zur Bearbeitung von Anforderungen verwenden, können before_first_request-Handler für jeden Unterprozess aufgerufen werden.
Das obige ist der detaillierte Inhalt vonWarum scheint mein Flask-Entwicklungsserver zweimal ausgeführt zu werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!