如何在Windows服务中运行APScheduler …我几乎就在那里
发布时间:2020-12-14 02:46:50 所属栏目:Windows 来源:网络整理
导读:我正在开发一个项目,将 Python APScheduler作为Windows服务运行,结果将转换为文本文件.我可以毫不费力地安装和启动服务. 我尝试了几种在服务中运行调度程序的方法,最常见且令人沮丧的结果是,当我停止服务时,调度程序的线程继续写入文本文件.我必须重新启动计
我正在开发一个项目,将
Python APScheduler作为Windows服务运行,结果将转换为文本文件.我可以毫不费力地安装和启动服务.
我尝试了几种在服务中运行调度程序的方法,最常见且令人沮丧的结果是,当我停止服务时,调度程序的线程继续写入文本文件.我必须重新启动计算机以终止线程. 我尝试过“阻塞”和“后台”调度程序,它们的行为相同. 我已经将scheduler.shutdown()移动到不同的地方.我想将它放在服务停止功能中并让调度程序运行,直到服务收到停止命令,服务停止功能将处理关闭调度程序. 也许你可以指出我正确的方向?以下是清理过的代码,以确保您不必重新启动计算机. import win32serviceutil import win32service import win32event import servicemanager import socket import time import logging import configparser import os from datetime import datetime from mysql.connector import errorcode from apscheduler.schedulers.background import BackgroundScheduler global FILEPATH global SERVICE #Define constants FILEPATH = os.path.dirname(os.path.realpath(__file__)) SERVICE = 'service.log' logging.basicConfig( filename = '%s%s' % (FILEPATH,SERVICE),level = logging.DEBUG,format = '[Logging Service] %(levelname)-7.7s %(message)s' ) def hi(text): logging.info(text) return class HelloWorldSvc (win32serviceutil.ServiceFramework): _svc_name_ = "Logging-Service" _svc_display_name_ = "Logging Service" _svc_description_ = "Periodically logs information" def __init__(self,args): win32serviceutil.ServiceFramework.__init__(self,args) self.stop_event = win32event.CreateEvent(None,None) socket.setdefaulttimeout(60) self.stop_requested = False def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.stop_event) logging.info('Stopping service ...') self.stop_requested = True def SvcDoRun(self): servicemanager.LogMsg( servicemanager.EVENTLOG_INFORMATION_TYPE,servicemanager.PYS_SERVICE_STARTED,(self._svc_name_,'') ) self.main() def main(self): logging.info(' ** Starting Logging Operation ** ') scheduler = BackgroundScheduler() scheduler.add_job(hi,'interval',seconds=5,args=['arg text']) scheduler.start() time.sleep(15) scheduler.shutdown() time.sleep(10) logging.info('Ended') return if __name__ == '__main__': win32serviceutil.HandleCommandLine(HelloWorldSvc) 解决方法
你试过像这样阻止它吗?
win32serviceutil.StopService(service,machine) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-server-2008-r2 – Windows Server 2008 R2中的远程
- windows-7 – 如何从命令行或系统调用打开“性能选项”对话
- windows – 两个DFS复制组类型之间有什么区别?
- 如何最好地处理Windows的16位wchar_t丑陋?
- 最小滑动窗口
- Windows – VirtualBox重新启动后从Vagrant重新连接同步文件
- Microsoft Enterprise Library 简介与请大家下载Microsoft
- 默认情况下,Windows XP中安装了哪些编程语言
- windows – SDL_Image IMG_Load在png上失败:“加载libpng1
- 一个简单实现的string类
推荐文章
站长推荐
热点阅读