2015-01-30 16 views
34

Zbudowałem kilka aplikacji Flask, ale w moim najnowszym projekcie zauważyłem coś dziwnego w trybie programowania. Druga linia zwykłej wiadomości w terminalu, który zawsze brzmi:Aplikacja "Restart ze statem" na kolbę

* Running on http://127.0.0.1:5000/ 
* Restarting with reloader 

został zastąpiony przez:

* Restarting with stat 

Nie sądzę, robiłem niczego innego, w rzeczywistości, zacząłem klonując projekt zestawu startowego, którego użyłem wiele razy, który sam w sobie nie wyświetla tego zachowania. Zauważyłem również, że projekt ten zużywa około 15% CPU, podczas gdy mój drugi projekt to zaledwie jeden błysk.

Jakieś pomysły, dlaczego tak się dzieje?

+1

Mogę potwierdzić, że a) zmiana zachowania wydaje się być wynikiem zmiany w wersji Werkzeug. b) że zwiększone użycie zasobów wydaje się być związane z reloaderem - ustawienie debugowania = False zmienia zachowanie. oraz c) instalacja instalatora obniża wymagania systemowe. Chciałbym również zauważyć, że uruchomienie aplikacji w trybie deweloperskim powoduje obecnie, że dwaj tłumacze pythonowi działają w porównaniu z poprzednimi, gdy tylko jeden uruchomił. (z watchdogiem lub bez) Ponadto: przy zainstalowanym systemie watchdog pojawi się komunikat: 'Restarting with fsevents reloader' – domoarrigato

+0

W rzeczywistości wiadomość będzie się różnić w zależności od systemu operacyjnego, watchdog jest sprytny. W systemie Linux komunikat może być "ponowne uruchamianie za pomocą inotify reloader". – davidism

+0

Dziękuję za to pytanie. W moim przypadku przeładowanie * w ogóle nie działało * dopóki nie zainstalowałem watchdoga. – g33kz0r

Odpowiedz

36

Sprawdź swoją wersję Werkzeug. Wersja 0.10 została właśnie wydana i wiele zmian wprowadzono do reloadera. Jedną zmianą jest to, że używany jest domyślny reloader odpytywania; stary reloader pyinotify był najwyraźniej niedokładny. Jeśli chcesz bardziej efektywnego odpytywania, zainstaluj pakiet watchdog. Możesz zobaczyć kod związany z tym here.

Gdy Werkzeug nie może znaleźć watchdoga, korzysta z reloadera stat, w przeciwnym razie korzysta z tego, co używa watchdog reloadera, który może się różnić w zależności od platformy. Ta wiadomość jest taka, że ​​wiesz, która z nich jest używana.

+0

Niestety, watchdog nie wydaje się być kompatybilny z 'gevent'. Ktoś ma rozwiązanie przy użyciu Flask z gevent? –

+0

Otworzyłem dla niego problem: https://github.com/gorakhargosh/watchdog/issues/306 –

3

Użyj run(use_reloader=False), aby wyłączyć ładowanie.

Dało mi to pewne problemy, gdy nie było możliwe odnalezienie pliku serwera po ponownym uruchomieniu. To załatwiło sprawę. Wykonano tylko raz i wszystko działało. Całkiem dziwne.