我试图让一系列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似乎停止工作,它坚持最后一个查询并停止更新,后面没有任何逻辑。有时跑了一圈,有时跑了三圈,但从来没有跑过五圈。在
如有任何建议,将不胜感激。在
目前没有回答
相关问题 更多 >
编程相关推荐