2011-10-04 16 views
5

Estoy usando CherryPy para recibir solicitudes a través de API REST. Además de gestionar las solicitudes, la aplicación también debería gestionar algunos recursos cada pocos segundos. ¿Cuál es la forma más fácil de hacer esto?servidor web python y tareas periódicas

1) ejecutar un hilo separado

2) cherrypy.process.plugins.PerpetualTimer (no estoy seguro de cómo usarlo, y parece que es pesado en recursos?)

3) alguna otra ¿camino?

La solución con un hilo separado está bien para mí, pero me preguntaba si hay una manera más agradable de hacerlo.

Tenga en cuenta que CherryPy no es un requisito: he decidido usarlo principalmente porque el proyecto se ve vivo y porque admite conexiones simultáneas múltiples (en otras palabras: estoy abierto a otras alternativas).

Respuesta

3

PerpetualTimer es simplemente una versión repetitiva de threading._Timer.

Lo que realmente quieres usar es cherrypy.process.plugins.Monitor, que es poco más que una forma de ejecutar una hebra separada para ti. Debería usarlo porque se conecta a cherrypy.engine, que rige el comportamiento de inicio y detención de los servidores CherryPy. Si ejecuta su propio hilo, querrá detenerlo cuando el CP se cierre de todos modos; la clase Monitor ya sabe cómo hacer eso. Utiliza PerpetualTimer bajo el capó, hasta versiones recientes, donde fue reemplazado por la clase BackgroundTask.

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

Perfecto, gracias! Edité tu respuesta para arreglar el paquete de la clase ([cherrypy.process.plugins.Monitor] (http://docs.cherrypy.org/dev/refman/process/plugins/index.html#cherrypy.process.plugins.Monitor)) En otra nota: el último parámetro tiene un nombre incorrecto, debe ser "intervalo". Gracias de nuevo, ¡justo lo que tenía en mente! – johndodo

Cuestiones relacionadas