Używam Flask do tworzenia strony internetowej, a podczas opracowywania uruchamiam flask przy użyciu następującego pliku:
#!/usr/bin/env python
from datetime import datetime
from app import app
import config
if __name__ == '__main__':
print '################### Restarting @', datetime.utcnow(), '###################'
app.run(port=4004, debug=config.DEBUG, host='0.0.0.0')
Kiedy uruchamiam serwer lub gdy automatycznie uruchamia się ponownie, ponieważ pliki zostały zaktualizowane, zawsze wyświetla dwukrotnie wiersz wydruku:
################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################
Choć tak naprawdę nie stanowi to problemu (reszta działa zgodnie z oczekiwaniami), po prostu zastanawiam się, dlaczego tak się zachowuje? Jakieś pomysły?
app.run
), ale nie czekając na pierwsze żądanie? Nie chcę, aby to pierwsze żądanie było obciążone kosztem inicjalizacji.WERKZEUG_RUN_MAIN
zmiennej środowiskowej i uruchamiać kod tylko wtedy, gdyDEBUG
ma wartość false lubWERKZEUG_RUN_MAIN
jest ustawiony. Robi się trochę nudne.dash
dla mnie). Dla każdego innegonoobs
jak ja oznacza to tylko funkcjonalność, w której edycja / zapisanie pliku wyzwala aktualizację na żywo.Jeśli używasz nowoczesnego
flask run
polecenia, żadna z opcji nieapp.run
jest używana. Aby całkowicie wyłączyć przeładowanie, podaj--no-reload
:Ponadto,
__name__ == '__main__'
nigdy nie będzie prawdziwe, ponieważ aplikacja nie jest wykonywana bezpośrednio. Wykorzystaj te same pomysły, co w odpowiedzi Martijna , ale bez__main__
bloku.źródło
Miałem ten sam problem, a ja go rozwiązać poprzez ustawienie
app.debug
sięFalse
. Ustawienie tego naTrue
powodowało__name__ == "__main__"
dwukrotne wywołanie mojego .źródło
__main__
nadal działa dwa razy z obydwomaapp.debug = False
iapp.run_server(debug=False)
. Czy na pewno zrobiłeś to za Ciebie, czy możesz wysłać jakiś powtarzalny kod, aby spróbować?flask
przezplotly dash
i okazało się, że niedawno zmienili domyślnydebug
argument przekazany doflask
. Zgaduję, że pomyliłem się powyżej i być może zrobiłemapp.debug=False
(co może jest zastąpione przez domyślne argumentyrun_server
) lub próbowałem tylko bez podaniaTrue
, a nie jawnie ustawiania, jak pokazano powyżej. Teraz działa to poprawnie (upewniając siędebug=False
). Dzięki!Od wersji Flask 0.11 zaleca się uruchamianie aplikacji za pomocą
flask run
zamiastpython application.py
. Użycie tego ostatniego może spowodować dwukrotne uruchomienie kodu.Jak stwierdzono tutaj :
źródło
Jednym z możliwych powodów, dla których aplikacja Flask uruchamia się sama dwukrotnie, jest konfiguracja
WEB_CONCURRENCY
ustawień w Heroku. Aby ustawić w jeden, możesz pisać w konsoliheroku config:set WEB_CONCURRENCY=1
źródło
Miałem ten sam problem. Rozwiązałem to, modyfikując mój plik main i wstawiając do niego use_reloader = False. Jeśli jakaś osoba szuka tutaj obejścia tego problemu, poniższy kod pomoże Ci rozpocząć, jednak funkcja automatycznego wykrywania zmian w kodzie przez ponowne uruchomienie aplikacji nie będzie działać. Będziesz musiał ręcznie zatrzymać i ponownie uruchomić aplikację po każdej edycji w kodzie.
źródło