2015-01-30 15 views
34

Ich habe ein paar Flask-Apps gebaut, aber bei meinem letzten Projekt ist mir im Entwicklungsmodus etwas merkwürdig aufgefallen. Die zweite Zeile der üblichen Meldung im Terminal, das immer liest:Flask App "Neustart mit Stat"

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

ersetzt wurde:

* Restarting with stat 

Ich glaube nicht, dass ich etwas anderes, in der Tat getan habe, begann ich durch das Klonen eines Starter-Kit-Projekts, das ich viele Male verwendet habe, welches selbst dieses Verhalten nicht zeigt. Ich merke auch, dass dieses Projekt etwa 15% CPU-Auslastung verbraucht, während mein anderes Projekt kaum ein Blip ist.

Irgendwelche Ideen, warum das passiert?

+1

Ich kann bestätigen, dass a) die Verhaltensänderung auf eine Änderung in der Werkzeug-Version zurückzuführen zu sein scheint. b) dass die erhöhte Ressourcennutzung mit dem reloader verbunden zu sein scheint - Einstellung debug = False ändert das Verhalten. und c) das Installieren von Watchdog verringert die Systemressourcenanforderungen. Ich würde auch bemerken, dass das Ausführen einer App im Dev-Modus nun dazu führt, dass zwei Python-Interpreter im Vergleich zu früher ausgeführt werden, wenn nur einer ausgeführt wurde. (entweder mit Watchdog oder ohne) Auch: mit Watchdog installiert, wird die Nachricht: 'Neustart mit fsevents reloader' – domoarrigato

+0

Eigentlich wird die Nachricht basierend auf Ihrem Betriebssystem variieren, Watchdog ist schlau darüber. Unter Linux lautet die Meldung möglicherweise "Neustart mit Inotify-Reloader". – davidism

+0

Vielen Dank für diese Frage. In meinem Fall funktionierte das Nachladen * gar nicht * bis ich Watchdog installierte. – g33kz0r

Antwort

36

Überprüfen Sie Ihre Version von Werkzeug. Version 0.10 wurde gerade veröffentlicht und zahlreiche Änderungen gingen in den Reloader. Eine Änderung ist, dass ein Standard-Polling-Reloader verwendet wird; der alte pyinotify reloader war anscheinend ungenau. Wenn Sie eine effizientere Abfrage wünschen, installieren Sie das Paket watchdog. Sie können den zugehörigen Code here sehen.

Wenn Werkzeug keinen Watchdog finden kann, wird der stat Reloader verwendet, ansonsten wird der Reloader Watchdog verwendet, der je nach Plattform variieren kann. Diese Nachricht dient nur dazu, dass Sie wissen, welcher gerade verwendet wird.

+0

Leider scheint Watchdog nicht mit 'gevent' kompatibel zu sein. Hat jemand eine Lösung bei der Verwendung von Flask mit gevent? –

+0

Ich öffnete ein Problem dafür: https://github.com/gorakhargosh/watchdog/issues/306 –

3

Verwenden Sie run(use_reloader=False), um den Neulader zu deaktivieren.

Es gab mir einige Probleme, wo es nicht gefunden wurde, meine Server-Datei beim Neustart. Das hat den Trick gemacht. Es hat nur einmal ausgeführt und alles hat funktioniert. Ziemlich merkwürdig.