在Python/Pyramid/CherryPy中,处理定期内务管理任务的正确方法是什么?
我有一个python web应用程序,它在web服务器上使用Pyramid/CherryPy 它有一些需要运行的定期内务管理任务-清除过时的会话,释放它们的资源,等等在Python/Pyramid/CherryPy中,处理定期内务管理任务的正确方法是什么?,python,python-3.x,pyramid,cherrypy,Python,Python 3.x,Pyramid,Cherrypy,我有一个python web应用程序,它在web服务器上使用Pyramid/CherryPy 它有一些需要运行的定期内务管理任务-清除过时的会话,释放它们的资源,等等 正确的管理方法是什么?我可以很容易地运行一个额外的“内务管理”线程(并使用一个单独的调度程序,如),但是让一个单独的线程进入正在运行的服务器线程似乎是一个非常笨拙的解决方案。CherryPy已经在一个(多线程)事件循环中运行服务器,似乎可以通过它来安排周期性事件。帮个忙,只需使用cron。无需使用自己的调度软件。帮自己一个忙,只需
正确的管理方法是什么?我可以很容易地运行一个额外的“内务管理”线程(并使用一个单独的调度程序,如),但是让一个单独的线程进入正在运行的服务器线程似乎是一个非常笨拙的解决方案。CherryPy已经在一个(多线程)事件循环中运行服务器,似乎可以通过它来安排周期性事件。帮个忙,只需使用cron。无需使用自己的调度软件。帮自己一个忙,只需使用cron即可。无需使用您自己的调度软件。查看位于的“主”频道查看位于的“主”频道。我是由@fumanchu的答案得出这个答案的,但我最终使用了该插件的一个实例: - 结果在CherryPy事件循环中每隔2秒调用
dohousing()
它也不包括做一些愚蠢的事情,比如拖拽整个操作系统,只是为了周期性地调用一个任务。我是通过@fumanchu的回答得到这个答案的,但我最终使用了一个插件实例: - 结果在CherryPy事件循环中每隔2秒调用
dohousing()
它也不需要做一些愚蠢的事情,比如拖拽整个操作系统,只是为了周期性地调用一个任务。web应用程序运行在哪个平台?@mskimm-你能更具体一点吗?它是Python3+CherryPy+Pyramid+mako(用于模板),都在linux上。如果你想问的话,它位于我控制的一个盒子里。这个web应用程序运行在哪个平台?@mskimm-你能更具体一点吗?它是Python3+CherryPy+Pyramid+mako(用于模板),都在linux上。如果你是这么问的话,它就放在我控制的一个盒子里。我也同意。还有一个python包,让您可以从python内部管理cron作业。在我看来,使用cron和在操作系统上添加依赖项来管理这类事情似乎是疯狂的。如果我想使用一个单独的调度器,我会添加一个运行类似的线程,我已经在应用程序的其他地方使用了。然而,任何这样的解决方案(基本上依靠外部机制进行干预)似乎都过于复杂和愚蠢。CherryPy有一个事件循环,应该有办法以某种方式对事件进行排队。我也同意。还有一个python包,让您可以从python内部管理cron作业。在我看来,使用cron和在操作系统上添加依赖项来管理这类事情似乎是疯狂的。如果我想使用一个单独的调度器,我会添加一个运行类似的线程,我已经在应用程序的其他地方使用了。然而,任何这样的解决方案(基本上依靠外部机制进行干预)似乎都过于复杂和愚蠢。CherryPy有一个事件循环,应该有办法以某种方式将事件排队。宾果。这看起来几乎正是我想要的。让我试着实现一些东西,我会接受你的答案。事实上,阅读插件接口上的文档会让我找到插件,这正是我想要的。链接已经死了。我现在该怎么办?@FakeName你的链接也被删除了dead@Ajoy-新链接:宾果游戏。这看起来几乎正是我想要的。让我试着实现一些东西,我会接受你的答案。事实上,阅读插件接口上的文档会让我找到插件,这正是我想要的。链接已经死了。我现在该怎么办?@FakeName你的链接也被删除了dead@Ajoy-新链接:
def doHousekeeping():
print("Housekeeper!")
def runServer():
cherrypy.tree.graft(wsgi_server.app, "/")
# Unsubscribe the default server
cherrypy.server.unsubscribe()
# Instantiate a new server object
server = cherrypy._cpserver.Server()
# Configure the server object
server.socket_host = "0.0.0.0"
server.socket_port = 8080
server.thread_pool = 30
# Subscribe this server
server.subscribe()
cherrypy.engine.housekeeper = cherrypy.process.plugins.BackgroundTask(2, doHousekeeping)
cherrypy.engine.housekeeper.start()
# Start the server engine (Option 1 *and* 2)
cherrypy.engine.start()
cherrypy.engine.block()