Ich habe einen flask / gevent SocketIOServer und muss es als Dienst funktionieren lassen:
%Vor%Allerdings kann ich nicht herausfinden, wie es von SvcStop gestoppt wird, und das Ausführen hat das seltsame Verhalten, dass das Service-Parsing von Befehlszeilenparametern NACH dem Beenden des Runservers erfolgte. Dies bedeutet, dass der Flashin Server ausgeführt wird. Ich kann vom Webbrowser aus zugreifen, der Service Manager hat ihn jedoch als "Nicht gestartet" aufgeführt. Zum Beispiel läuft in der Befehlszeile:
%Vor%Mit dem Vorschlag, den Live-Reloader zu entfernen, ist dies der verbleibende Code. Trotzdem, das gleiche Problem
def SvcDoRun (selbst): servicemanager.LogMsg (Servicemanager.EVENTLOG_INFORMATION_TYPE, Servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, ''))
%Vor%Um es von SvcStop zu stoppen, müssen Sie einen Verweis auf "ws" in einer globalen Variablen speichern (das heißt, irgendwo, wo es später abgerufen werden kann). AFAIK "ws.kill ()" sollte dann die Schleife beenden.
Der run_with_loader-Decorator scheint die dekorierte Funktion sofort auszuführen, was erklären würde, warum die Befehlszeile nach der Ausführung des Webservers verarbeitet wird. Brauchen Sie ein automatisches Nachladen, erscheint der Decorator nur dann, wenn Sie neu geladen werden müssen.
UPDATE: Beispielcode hinzugefügt
In einem Projekt, das keine Flasche oder Gevent verwendet, benutze ich etwas ähnliches (mit vielen Details entfernt):
%Vor% Die Methode serve_forever
stammt von BaseServer.serve_forever
. Um es zu stoppen, müssen Sie BaseServer.shutdown()
oder eine Ableitung davon aufrufen.
Kurz gesagt, Sie müssen ws
im globalen Gültigkeitsbereich deklarieren. Wenn Sie diesen Code vor Ihre Service
-Klassendefinition stellen, können Sie dies tun.
Ändern Sie dann Ihre Service.SvcStop
-Implementierung zu dieser:
Da ws.shutdown()
bereits darauf wartet, dass der Listener stoppt, können Sie self.hWaitStop
loswerden, es sei denn, Sie verwenden es woanders in Ihrem Code.
Erfordert Python 2.6 +
Ich kann nicht auf WSGIRequestHandler
in Flask außerhalb von request
zugreifen, also verwende ich Process
.
Tags und Links python windows-services windows flask gevent-socketio