Python 网络服务器和周期性任务

5 投票
1 回答
1583 浏览
提问于 2025-04-17 03:38

我正在使用CherryPy通过REST API接收请求。除了处理请求之外,应用程序还需要每隔几秒钟进行一些资源管理。有什么简单的方法可以做到这一点呢?

1) 运行一个单独的线程

2) 使用cherrypy.process.plugins.PerpetualTimer(我不太确定怎么用,而且看起来会消耗很多资源?)

3) 还有其他方法吗?

我觉得用单独的线程解决这个问题可以,但我在想有没有更好的方法呢?

需要注意的是,CherryPy并不是必须的——我选择使用它主要是因为这个项目看起来还在更新,并且它支持多个同时连接(换句话说:我也愿意尝试其他选择)。

1 个回答

3

PerpetualTimer其实就是一个可以重复运行的定时器,类似于threading._Timer。

你真正想用的是 cherrypy.process.plugins.Monitor,它实际上就是帮你运行一个单独线程的工具。你应该使用它,因为它可以和cherrypy.engine连接在一起,后者负责管理CherryPy服务器的启动和停止。如果你自己去运行一个线程,当CherryPy关闭的时候,你肯定希望这个线程也能停止;而Monitor类已经知道怎么做到这一点。它在后台使用PerpetualTimer,直到最近的版本中被BackgroundTask类替代。

my_task_runner = Monitor(cherrypy.engine, my_task, frequency=3)
my_task_runner.subscribe()

撰写回答