Я создал службу на основе этого кода Можно ли запустить сценарий Python как службу в Windows? Если возможно, то как?
Проблема в том, что я не могу остановить службу плавно.
Чтобы остановить службу, мне нужно было бы повторно проверять флаг для события остановки каждый период времени.
Есть ли лучший способ остановить службу в Python? Вот как я сейчас пытаюсь остановить свою службу.
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
myStatusThread = threading.Thread(target=win32event.WaitForSingleObject, args=(self.hWaitStop, win32event.INFINITE))
myStatusThread.start()
while True:
if not myStatusThread.isAlive():
sys.exit(0)
else:
doStuff()#do something that takes some time
Таким образом, служба останавливается только после завершения "doStuff", что может занять много времени.
Я хотел бы остановить службу, как только пользователь остановит ее в службах.