【发布时间】:2016-02-25 04:58:46
【问题描述】:
我根据此代码创建了一个服务Is it possible to run a Python script as a service in Windows? If possible, how?
问题是我无法顺利停止服务。
要停止服务,我需要每隔一段时间重新检查停止事件的标志。
有没有更好的方法来停止 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”完成后才会停止,这可能需要很长时间。
我想在用户在服务中停止服务后立即停止服务。
【问题讨论】:
-
你在检查什么样的标志?
-
服务通常包含一个循环,等待某事发生(连接到套接字、存在文件等)并处理事件。在不知道您的循环是什么样子的情况下,除了说 test the f... Stop event 之外,很难就停止它的方式给出建议。您能介绍一下您的服务的基本情况吗?
-
我编辑了我的问题