- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发一个将 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,0,0,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 - 如何在 Windows 服务中运行 APScheduler ...我快到了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27351859/
我有一些经常运行或持续一段时间的重复性工作。 似乎 Scheduler().get_jobs() 只会返回当前未运行的计划作业列表,因此我无法确定具有特定 id 的作业是否不存在或实际正在运行。 在这
我不知道为什么会收到此错误:ImportError: No module named 'apscheduler'。 我尝试安装旧版本:sudo pip uninstall apscheduler 然后
我有一个正在运行的 Django 项目及其数据库和模型表。现在,我想使用 Django 数据库连接集成 APScheduler 并将 APScheduler 作业保存在与其他表相同的数据库中。 我已阅
我是 APScheduler 的新手,并在在更大范围内实现之前对其进行了测试。 我已经创建了下面的代码,但是当我将 add_job 与 trigger='date' 一起使用时,我的函数从未被调用过。
我有一个使用 uwsgi(有 10 个 worker )+ ngnix 运行的 django 应用程序。我正在使用 apscheduler 进行调度。每当我安排一项工作时,它都会被多次执行。从这些答案
调度程序在生产中运行良好,然后突然关闭。显然,DB 可能已经离线了一段时间(网络应用程序从未错过任何一个节拍,因此它是短暂的)。 日志报告... [2019-11-25 07:59:14,907: I
我正在使用 APScheduler(3.5.3) 来运行三个不同的作业。我需要在完成第一份工作后立即触发第二份工作。另外我不知道第一份工作的完成时间。我将触发器类型设置为 cron 并计划每 2 小时
我们正在运行 Azure Kubernetes 集群(DEV、TST、PRD 上每个阶段一个),我们需要定期运行多个 Python 脚本,这就是我们使用 APScheduler (3.6.0) 的目的
目前,我正在使用 APScheduler 每 10 分钟自动执行一次脚本。它在 print("[+] Success! Bot Starting!") 之后停止执行,它不会输出错误。我建议我的 Sch
我在程序中使用 APScheduler 在特定日期时间安排作业。但是,我正在处理与本地时间不同时区的日期时间。所以我传递给 APScheduler 的日期时间始终是一个时区感知的日期时间... sch
我们需要在当前作业执行时动态调度多个作业。 大概的场景是: 应该有一个调度程序来每天检查应用程序表(假设在世界标准时间上午 6 点)。查找今天的日期时间为resume_dttime的用户为该用户动态安
我尝试了APS的MongoJobStore example。示例代码为: import logging import os import sys from datetime import dateti
我在脚本中使用模块APScheduler,我使用BlockingScheduler。我有一些定期的工作。如果此作业引发一个异常,无论我在try中期望它还是让它传播,我的线程都会这样做不返回。然后我达到
我希望每天早上 6 点启动我的主要任务。但出于测试目的,我将间隔设置为 5 秒。问题是它似乎永远不会开火。我在 maintask 方法中有一个从未到达的断点,并且没有任何内容打印到控制台。我假设它没有
我通过 apscheduler 安排了作业。到目前为止,我有 3 份工作,但很快就会有更多。我正在寻找一种方法来扩展我的代码。 目前,每个作业都是它自己的.py文件,在该文件中,我将脚本变成了一个以r
我在 django 中运行了 apscheduler,它似乎可以正常工作……好吧。在我的项目 init.py 中,我初始化了调度程序: scheduler = Scheduler(daemon=Tru
我正在尝试为 Github 上的一个项目做出贡献,以收集财务信息 数据。 代码.. # time_keeper.py from apscheduler.scheduler import
[Python 3.5.2, APScheduler 3.3.1] APScheduler 启动了一些线程,我想知道为什么。 这是我正在执行的代码(在 PyCharm 中,我还可以在其中绘制线程图):
我当前正在尝试设置调度程序(使用 apscheduler),但在添加作业时失败: from apscheduler.schedulers.blocking import BlockingSchedul
我正在 redis 中添加作业,完成作业后我添加了一个事件处理程序。在事件处理程序中,我返回值,根据该值我从作业库中删除作业 ID。它被成功删除,但立即抛出异常。 代码 from datetime i
我是一名优秀的程序员,十分优秀!