#python #multithreading #webserver #cherrypy
#python #многопоточность #веб-сервер #cherrypy
Вопрос:
Я использую CherryPy для получения запросов через REST API. Помимо обработки запросов приложение также должно выполнять некоторое управление ресурсами каждые несколько секунд. Какой самый простой способ сделать это?
1) запустите отдельный поток
2) cherrypy.process.plugins.Вечный таймер (не уверен, как его использовать, и похоже, что он требует больших ресурсов?)
3) какой-то другой способ?
Решение с отдельным потоком меня устраивает, но мне было интересно, есть ли более приятный способ сделать это?
Обратите внимание, что CherryPy не является обязательным требованием — я решил использовать его в первую очередь потому, что проект выглядит живым и поддерживает несколько одновременных подключений (другими словами: я открыт для альтернатив).
Ответ №1:
PerpetualTimer — это просто повторяющаяся версия многопоточности._Timer.
Что вы действительно хотите использовать, так это cherrypy.process.plugins.Монитор, который немного больше, чем способ запустить отдельный поток для вас. Вы должны использовать его, потому что он подключается к cherrypy.engine, который управляет запуском и остановкой серверов CherryPy. Если вы запускаете свой собственный поток, вы все равно захотите, чтобы он останавливался при завершении работы CP; класс Monitor уже знает, как это сделать. Он использует PerpetualTimer под капотом, до последних версий, где он был заменен классом BackgroundTask .
my_task_runner = Monitor(cherrypy.engine, my_task, frequency=3)
my_task_runner.subscribe()
Комментарии:
1. Отлично, спасибо! Я отредактировал ваш ответ, чтобы исправить пакет классов ( cherrypy.process.plugins. Монитор ). Еще одно замечание: последний параметр назван неправильно, он должен быть «интервал». Еще раз спасибо, именно это я и имел в виду!