Force CherryPy Child Threads

cherrypy, multithreading, python

Solution

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.

Problem

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 ?

Original source