2011-10-04 53 views
5

我正在使用CherryPy通過REST API接收請求。除了處理請求之外,應用程序還應該每隔幾秒進行一次資源管理。什麼是最簡單的方法來做到這一點?python web服務器和週期性任務

1)運行一個單獨的線程

2)cherrypy.process.plugins.PerpetualTimer(不知道如何使用它,它看起來是沉重的資源?)

3)其他一些辦法?

帶有單獨線程的解決方案對我來說很好,但我想知道是否有更好的方法來實現它?

請注意,CherryPy不是一項要求 - 我決定主要使用它,因爲項目看起來很活躍,並且因爲它支持多個同時連接(換句話說,我對替代品開放)。

回答

3

PerpetualTimer只是threading._Timer的重複版本。

你真正想使用的是cherrypy.process.plugins.Monitor,這不僅僅是爲你運行一個單獨的線程的方式。你應該使用它,因爲它插入cherrypy.engine,它管理CherryPy服務器的啓動和停止行爲。如果你運行自己的線程,無論如何,當CP關閉時,你會希望它停止; Monitor類已經知道如何做到這一點。它在引擎蓋下使用PerpetualTimer,直到最近的版本,它被BackgroundTask類取代。

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

完美,謝謝!我編輯了您的答案以修復類包([cherrypy.process.plugins.Monitor](http://docs.cherrypy.org/dev/refman/process/plugins/index.html#cherrypy.process.plugins.Monitor) )。另一個說明:最後一個參數名稱錯誤,它應該是「間隔」。再次感謝,正是我想到的! – johndodo