Doppelter Neustart-Ausdruck im Flask Dev Server
Beim Ausführen eines Website-Entwicklungsservers mit Flask ist Benutzern ein ungewöhnliches Verhalten beim Neustart des Servers aufgefallen Die Meldung erscheint zweimal statt einmal. Um den Grund dafür zu verstehen, werfen wir einen Blick auf die Mechanik des Entwicklungsservers von Flask.
Flask nutzt Werkzeug, eine WSGI-Dienstprogrammbibliothek, um den Entwicklungsserver über die Methode app.run() zu starten. Werkzeug verwendet eine Technik namens „Reloading“, um den Server automatisch neu zu starten, wenn Änderungen im Code erkannt werden. Beim Neuladevorgang wird ein untergeordneter Prozess erzeugt, der Ihr Flask-Skript mithilfe von subprocess.call() erneut ausführt.
Dieser untergeordnete Prozess setzt denselben Code wie der übergeordnete Prozess voraus, was zur doppelten Ausführung der Neustartmeldung führt. Um dieses Verhalten zu beseitigen, setzen Sie den Parameter use_reloader von app.run() auf False. Alternativ können Sie den Reloader während der Befehlszeilenausführung von Flask deaktivieren:
FLASK_DEBUG=1 flask run --no-reload
Für fortgeschrittene Szenarien, in denen die Erkennung des Vorhandenseins des neu ladenden untergeordneten Prozesses von entscheidender Bedeutung ist, verwenden Sie die Funktion is_running_from_reloader() von Werkzeug. Es ist jedoch ratsam, den @app.before_first_request-Dekorator zum Initialisieren von Modulglobalen zu verwenden, um eine einzelne Ausführung nach jedem Neuladen zu gewährleisten.
@app.before_first_request def before_first_request(): print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
Beachten Sie, dass before_first_request-Handler möglicherweise für jeden neuen Unterprozess in vollwertigem WSGI aufgerufen werden Server, die Forking oder neue Unterprozesse verwenden.
Das obige ist der detaillierte Inhalt vonWarum zeigt mein Flask Dev Server eine doppelte Neustartmeldung an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!