Heim > Backend-Entwicklung > Python-Tutorial > Warum druckt mein Flask Development Server Startmeldungen zweimal?

Warum druckt mein Flask Development Server Startmeldungen zweimal?

Barbara Streisand
Freigeben: 2024-12-20 01:04:08
Original
298 Leute haben es durchsucht

Why Does My Flask Development Server Print Startup Messages Twice?

Flask Development Server wird zweimal ausgeführt

Beim Ausführen einer Flask-Anwendung mit der Methode app.run() kann es vorkommen, dass die print-Anweisung den Neustart des Servers angibt kommt zweimal vor. Dieses Verhalten kann dem Werkzeug-Reloader zugeschrieben werden.

Werkzeug, die zugrunde liegende Bibliothek, die den Entwicklungsserver von Flask antreibt, verwendet einen untergeordneten Prozessmechanismus, um Codeänderungen und den automatischen Neustart zu erleichtern. Wenn Sie app.run() ausführen, erzeugt der Reloader einen untergeordneten Prozess, der Ihren Code kontinuierlich überwacht.

Um dies zu veranschaulichen, analysieren wir die Funktion restart_with_reloader() in Werkzeug. Die Funktion ruft subprocess.call() auf, um Ihr Skript erneut auszuführen, was zur Entstehung eines untergeordneten Prozesses führt. Folglich beachten Sie die print-Anweisung zweimal.

Um diese Duplizierung zu vermeiden, sollten Sie den Reloader deaktivieren. Sie können dies erreichen, indem Sie use_reloader in app.run() auf False setzen:

app.run(port=4004, debug=config.DEBUG, host='0.0.0.0', use_reloader=False)
Nach dem Login kopieren

Alternativ können Sie den Reloader deaktivieren, wenn Sie den Befehl „flask run“ verwenden:

FLASK_DEBUG=1 flask run --no-reload
Nach dem Login kopieren

Eine weitere Option besteht darin, die Funktion werkzeug.serving.is_running_from_reloader() zu verwenden, um festzustellen, ob Sie innerhalb des untergeordneten Elements des Reloaders ausführen Prozess.

Wenn Sie jedoch Modulglobale benötigen, entscheiden Sie sich für den @app.before_first_request-Dekorator. Mit diesem Dekorator können Sie eine Funktion angeben, die einmal nach jedem Neuladen aufgerufen wird, wenn die erste Anfrage empfangen wird:

@app.before_first_request
def before_first_request():
    print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
Nach dem Login kopieren

Beachten Sie, dass bei der Ausführung auf einem vollwertigen WSGI-Server Forking oder Unterprozesse für die Anfragebearbeitung verwendet werden , before_first_request-Handler können für jeden neu erstellten Unterprozess aufgerufen werden.

Das obige ist der detaillierte Inhalt vonWarum druckt mein Flask Development Server Startmeldungen zweimal?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage