Heim >Backend-Entwicklung >Python-Tutorial >Warum scheint mein Flask-Entwicklungsserver zweimal ausgeführt zu werden?

Warum scheint mein Flask-Entwicklungsserver zweimal ausgeführt zu werden?

DDD
DDDOriginal
2024-12-09 17:41:19434Durchsuche

Why Does My Flask Development Server Appear to Execute Twice?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn