Python, CherryPy, Windows Service, and BackgroundTask - Tasks not recurring as expected Python,CherryPy,Windows服務和BackgroundTask - 任務不如預期循環

2024-06-09 08:06:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图让一系列python脚本每60秒更新一次,并通过CherryPy在Windows上提供JSON服务(用于WMI功能),并作为Windows服务进行管理。简言之,如果我在服务外部的控制台中运行代码,那么任务会定期从BackgroundTask类执行,不会出现问题。一旦在CherryPy windows服务中结束,它们会执行一两次,然后停止工作(JSON停止变化)。在

这是activestatepython2.7(社区)上的cherrypy3.3.0。在

运行下面的代码,脚本就可以工作了(import-snmp是每隔60秒运行一次的python脚本,它以这种形式运行)。在

import cherrypy
from cherrypy.lib.static import serve_file
import cherrypy.process.plugins
import win32serviceutil
import win32service
import win32event
import os
import snmp

class myserver():
    @cherrypy.expose
    def snmp_ajax(self):
        cherrypy.response.headers['Content-Type'] = 'application/json'
        return snmp.json

def snmp_callback():
    global snmp_data
    snmp.generate_json(snmp_data)

snmp_data = cherrypy.process.plugins.BackgroundTask (60, snmp_callback)
snmp_data.start()

cherrypy.tree.mount(myserver(), '/', config=CONFIG)
cherrypy.config.update({
        'global':{
            'server.socket_host': '0.0.0.0',
            'server.socket_port': 8989,
        'log.screen': False,
            'engine.autoreload.on': False,
            'engine.SIGHUP': None,
            'engine.SIGTERM': None
        }                
    }) 

cherrypy.engine.start()

现在,要将其作为Windows服务运行,只需将底部cherrypy代码放入CherryPyService类中,如下所示:

^{pr2}$

然而,一旦它被包装在CherryPyService类中,BackgroundTask似乎停止工作,它坚持最后一个查询并停止更新,后面没有任何逻辑。有时跑了一圈,有时跑了三圈,但从来没有跑过五圈。在

如有任何建议,将不胜感激。在


Tags: 代码import脚本jsondatawindowspluginsprocess