views:

302

answers:

1

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 ?

+5  A: 

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.

fumanchu
Okay. I will look into this. I'm using the quickstart method. Can I put these start and stop methods inside my root class that I use with cherrypy.quickstart() ? Or can you tell me how I would use this class MyFeature(), with my already root class I'm using Root().. Sorry, I haven't had extensive use with CherryPy..
Sure; you can put that code anywhere you like; the only important thing is that you subscribe it before you run quickstart.
fumanchu