2011-10-04 2 views
5

Sto utilizzando CherryPy per ricevere richieste tramite API REST. Oltre a gestire le richieste, l'applicazione dovrebbe eseguire anche alcune risorse di gestione ogni pochi secondi. Qual è il modo più semplice per farlo?server web python e attività periodiche

1) eseguire un thread separato

2) cherrypy.process.plugins.PerpetualTimer (non so come usarlo, e sembra che è pesante sulle risorse?)

3) qualche altro modo?

La soluzione con un thread separato va bene per me, ma mi chiedevo se c'è un modo migliore per farlo?

Nota che CherryPy non è un requisito: ho deciso di usarlo principalmente perché il progetto sembra vivo e perché supporta più connessioni simultanee (in altre parole: sono aperto alle alternative).

risposta

3

PerpetualTimer è solo una versione ripetuta di threading._Timer.

Quello che si vuole veramente usare è cherrypy.process.plugins.Monitor, che è poco più di un modo per eseguire un thread separato per voi. Dovresti usarlo perché si inserisce in cherrypy.engine, che governa il comportamento di avvio e arresto dei server CherryPy. Se si esegue il proprio thread, si vorrà farlo arrestare quando CP si arresta comunque; la classe Monitor sa già come farlo. Utilizza PerpetualTimer sotto il cofano, fino alle versioni recenti, dove è stato sostituito dalla classe BackgroundTask.

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

Perfetto, grazie! Ho modificato la tua risposta per correggere il pacchetto di classe ([cherrypy.process.plugins.Monitor] (http://docs.cherrypy.org/dev/refman/process/plugins/index.html#cherrypy.process.plugins.Monitor)). In un'altra nota: l'ultimo parametro è erroneamente chiamato, dovrebbe essere "intervallo". Grazie ancora, proprio quello che avevo in mente! – johndodo