Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Force CherryPy Child Threads

Well, I want cherrypy to kill all child threads on auto-reload instead of "Waiting for child threads to terminate" because my program has threads of its own and I don't know how to get past this. CherryPy keeps hanging on that one line and I don't know what to do to get the 'child threads' to terminate...

`

[05/Jan/2010:01:14:24] ENGINE HTTP Server cherrypy._cpwsgi_server.CPWSGIServer(('127.0.0.1', 8080)) shut down
[05/Jan/2010:01:14:24] ENGINE Stopped thread '_TimeoutMonitor'.
[05/Jan/2010:01:14:24] ENGINE Bus STOPPED
[05/Jan/2010:01:14:24] ENGINE Bus EXITING
[05/Jan/2010:01:14:24] ENGINE Bus EXITED
[05/Jan/2010:01:14:05] ENGINE Waiting for child threads to terminate...

`

it never continues.. So i want to force the child threads to close ...

I know it is because my application is using threads of its own and I guess cherrypy wants those threads to quit along with CherryPy's.... Can I overcome this ?

like image 847
user233864 Avatar asked Jan 05 '10 06:01

user233864


1 Answers

You need to write code that stops your threads, and register it as a listener for the 'stop' event:

from cherrypy.process import plugins

class MyFeature(plugins.SimplePlugin):
    """A feature that does something."""

    def start(self):
        self.bus.log("Starting my feature")
        self.threads = mylib.start_new_threads()

    def stop(self):
        self.bus.log("Stopping my feature.")
        for t in self.threads:
            mylib.stop_thread(t)
            t.join()

my_feature = MyFeature(cherrypy.engine)
my_feature.subscribe()

See http://www.cherrypy.org/wiki/BuiltinPlugins and http://www.cherrypy.org/wiki/CustomPlugins for more details.

like image 134
fumanchu Avatar answered Sep 27 '22 18:09

fumanchu