长时间运行进程的超时和 Windows 服务 (Python)

2024-04-20

我有一个使用 python 创建的简单 Windows 服务。我的问题是,我不知道该服务需要多长时间才能完成,可能需要 15 秒,也可能需要 4 个多小时,具体取决于需要对数据执行的操作。 4个多小时的情况很少见,但我也遇到过这种情况。

以下是我一直遵循的 Windows 服务的一般模式。我删除了所有逻辑,但这不是问题,只留下了一个虚拟的日志命令。有没有办法防止服务继续或不刷新,直到逻辑部分完成而不是使用超时?

import win32service
import win32serviceutil
import win32api
import win32con
import win32event
import win32evtlogutil
import os
import sys
import time
import logging
class aservice(win32serviceutil.ServiceFramework):
    _svc_name_ = "WeatherService"
    _svc_display_name_ = "Weather Service"
    _svc_description_ = "Downloads weather data from NOAA and creates maps"
    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):
        import servicemanager      
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,(self._svc_name_, '')) 
        self.timeout = 640000    #640 seconds / 10 minutes (value is in milliseconds)
        #self.timeout = 120000     #120 seconds / 2 minutes
        # This is how long the service will wait to run / refresh itself (see script below)
        while 1:
            # Wait for service stop signal, if I timeout, loop again
            rc = win32event.WaitForSingleObject(self.hWaitStop, self.timeout)
            # Check to see if self.hWaitStop happened
            if rc == win32event.WAIT_OBJECT_0:
                # Stop signal encountered
                servicemanager.LogInfoMsg(self._svc_name_ + " - STOPPED!")  #For Event Log
                break
            else:
                #[actual service code between rests]
                try:
                    logging.basicConfig(filename=r"c:\temp\example.log",level=logging.DEBUG,
                                        format='%(asctime)s %(message)s')
                    logging.debug('This message should go to the log file')
                    logging.info('So should this')
                    logging.warning('And this, too')

                    #file_path = "C:\whereever\my_REAL_py_work_to_be_done.py"
                    #execfile(file_path)             #Execute the script
                    #inc_file_path2 = "C:\whereever\MORE_REAL_py_work_to_be_done.py"
                    #execfile(inc_file_path2)        #Execute the script
                except:
                    pass
                #[actual service code between rests]


def ctrlHandler(ctrlType):
    return True

if __name__ == '__main__':   
    win32api.SetConsoleCtrlHandler(ctrlHandler, True)   
    win32serviceutil.HandleCommandLine(aservice)

您可以启动一个新流程来完成长期运行的事情。如果停止信号到达,则终止子进程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

长时间运行进程的超时和 Windows 服务 (Python) 的相关文章

  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 使用 CreateProcessAsUser 和 CreateEnvironmentBlock 创建进程后未设置 Clientname

    我编写了一个在本地系统帐户下运行的 C 服务 当用户登录终端服务器时 我用它来生成一个进程 该服务实现了OnSessionChange方法并接收SessionChangeDescription具有相应SessionID的消息 我使用此 Se
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • LinkedHashMap 的 ConcurrentModificationException

    不确定是什么触发了java util ConcurrentModificationException当我迭代时LinkedHashMap下面代码中的结构 使用Map Entry方法效果很好 从之前的帖子中没有得到关于触发此问题的良好解释 任
  • 是否可以在RStudio中漂亮地显示管道字符(%>%)?

    管道运营商 gt 被大量使用在dplyr 我遇到了这个设置 将其精美地写为 unicode 三箭头字符 如下所示 我想知道是否有可能获得相同的显示RStudio 附注Emacs 的源代码 包括 elisp 代码 位于 https githu
  • 如何知道 ModelState 是否包含错误

    当表单发布到我的控制器中时 我会进行以下检查 if ModelState IsValid 如果模型无效 则会将错误添加到ModelState 然后 模型会连同验证摘要一起传递到视图 但是 我想检查一下是否ModelStatejQuery 内
  • 在 iOS 上合并 PDF 文件

    iOS中有没有一种方法可以合并PDF文件 即将一个文件的页面附加到另一个文件的末尾并将其保存到磁盘 我对 Jonathan 的代码进行了一些重构 以加入任何大小的 PDF 文件 NSString joinPDF NSArray listOf
  • 如何使用Cmake使用框架?

    对于 Macos 我想链接到一些框架 在 Windows 中 我想链接到一些库 比如OpenGL Framework 如何使用cmake表达这个需求 您可以尝试以下代码 target link libraries
  • 具有数百个字段的 Django 模型

    我有一个具有数百个属性的模型 属性可以是不同的类型 整数 字符串 上传的文件 我想从最重要的属性开始逐步实现这个复杂的模型 我可以想到两个选择 将属性定义为常规模型字段 定义一个单独的模型来分别保存每个属性 并使用ForeignKey 我还
  • 当文本模糊时,Android BlurMaskFilter 在 canvas.drawOval 中没有任何效果

    我一直在尝试创建一个自定义视图 其文本下的形状模糊 问题是 BlurMaskFilter 对我在画布上绘制的任何形状没有影响 以下是我在构造函数中初始化 Paint 对象的方法 paint new Paint 0 paint setColo
  • HTML:光标显示在只读输入文本中?

    假设我们有一个只读的文本框 如下所示
  • 如何裁剪 PDF 页面

    谁能帮助我 如何像 Acrobat Professional 那样剪切 PDF 页面 This snippet http osdir com ml windows dotnet itextsharp general 2008 09 msg0
  • 使网格正确对齐

    在我的应用程序中 我在列表框中显示有关用户的一些信息 我已经得到了我想要的大部分东西 但布局有点困扰我 它由网格制成 因此可以重新调整大小并适合纵向 横向模式 However I cannot get the layout to fix i
  • TensorFlow 队列关闭后可以重新打开吗?

    我想将项目入队 关闭队列以确保其他会话将所有剩余项目出队 然后在下一个纪元稍后重新打开它 这可能吗 q tf FIFOQueue close q q close reopen q with tf Session as sess sess r
  • Selenium Webdriver:处理 NoSuchElementException 的最佳实践

    经过大量搜索和阅读后 我仍然不清楚使用 Webdriver 处理失败断言的最佳方法 我本以为这是一个常见且核心的功能 我想做的就是 寻找一个元素 如果在场 告诉我 如果不在场 告诉我 我想向非技术受众展示结果 因此让它抛出带有完整堆栈跟踪的
  • 使用 CSS 和 JS 创建金字塔

    我有一个包装 div 和许多内容块 内容块可以是任意数量 div class wrapper div class content block Something goes here div div class content block S
  • 使用通用字典和/或使用 IDictionary 排序

    我有一个字典 其中的值是在运行时确定的 我可以将其创建为IDictionary并添加到它很好 但我无法排序 有没有办法将其创建为Dictionary这样我就可以访问OrderBy或者是否有另一种方法将其排序为IDictionary void
  • Symfony 控制器中操作的含义

    我是 Symfony 框架的新手 我在 Symfony 中启动简单项目 我在控制器中定义了一个函数 例如 public function sampleAction 这里的Action是什么意思 这只是一个约定 在其他框架中也是如此 例如 Z
  • iOS核心运动检测向前/向后倾斜

    我正在使用 iOS 核心运动框架来检测设备是否向前或向后倾斜 详情请看图片 https i stack imgur com 2Ojw5 jpg https i stack imgur com 2Ojw5 jpg 使用俯仰值 a 可以检测到这
  • 如何正确设置 hellem.js 来解决 CSP 问题?

    当我启动 Express 应用程序时 浏览器会出现以下错误 Refused to load the script http localhost 1337 main js because it violates the following C
  • Laravel 默认 .htaccess 文件将不起作用

    我终于为 Laravel 安装了所有内容 但我的主页上出现错误 500 它看起来是我的 htaccess 文件 如果我删除它 页面就可以工作 如果我把它放回去 又会出现500错误
  • 使用自定义 http 标头进行 Spring MVC 重定向

    我正在开发小型 spring mvc 应用程序 其中用户需要使用一些 http 标头重定向到外部应用程序 例如说 用户正在 url 上的应用程序 1 上http localhost 8080 app1 http localhost 8080
  • 长时间运行进程的超时和 Windows 服务 (Python)

    我有一个使用 python 创建的简单 Windows 服务 我的问题是 我不知道该服务需要多长时间才能完成 可能需要 15 秒 也可能需要 4 个多小时 具体取决于需要对数据执行的操作 4个多小时的情况很少见 但我也遇到过这种情况 以下是