веб-сервер Python и периодические задачи - PullRequest
5 голосов
/ 04 октября 2011

Я использую CherryPy для получения запросов через REST API. Помимо обработки запросов, приложение должно также осуществлять управление ресурсами каждые несколько секунд. Какой самый простой способ сделать это?

1) запустить отдельный поток

2) cherrypy.process.plugins.PerpetualTimer (не знаете, как его использовать, и, похоже, оно сильно загружено?)

3) как-нибудь иначе?

Мне подходит решение с отдельной веткой, но мне было интересно, есть ли лучший способ сделать это?

Обратите внимание, что CherryPy не является обязательным требованием - я решил использовать его в первую очередь потому, что проект выглядит живым и потому что он поддерживает несколько одновременных соединений (другими словами: я открыт для альтернатив).

1 Ответ

3 голосов
/ 04 октября 2011

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()
...