2010-01-05 8 views
9

Nun, ich möchte, dass cherrypy alle untergeordneten Threads beim automatischen Neuladen statt "Warten auf untergeordnete Threads zu beenden" abbrechen, weil mein Programm eigene Threads hat und ich nicht weiß, wie man darüber hinaus kommt . CherryPy hält auf, dass eine Linie hängen und ich weiß nicht, was die ‚Kinder Threads‘ zu tun ist, um zu beenden ...Erzwingen CherryPy Kind Threads

`

[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... 

`

es weiter nie .. So möchte ich die Kind-Threads zum Schließen zwingen ...

Ich weiß, es ist, weil meine Anwendung eigene Threads verwendet und ich denke, dass cherrypy will, dass diese Threads zusammen mit CherryPy beenden .... Kann ich das überwinden ?

+0

Ich fange ich CherryPy des Auto-Reload-Überlastung zu denken, sollte meine eigene client.thread zu töten ... Aber wie ich nicht kno. – user233864

Antwort

11

Sie müssen Code schreiben, Ihre Fäden stoppt, und als für den ‚Stop‘ Ereignis-Listener registrieren:

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() 

Siehe http://www.cherrypy.org/wiki/BuiltinPlugins und http://www.cherrypy.org/wiki/CustomPlugins für weitere Details.

+1

Okay. Ich werde das untersuchen. Ich verwende die Schnellstartmethode. Kann ich diese Start-und-Stopp-Methoden in meine root-Klasse einfügen, die ich mit cherrypy.quickstart() verwende? Oder können Sie mir sagen, wie ich diese Klasse verwenden würde MyFeature(), mit meinem bereits root-Klasse Ich benutze Root() .. Leider habe ich keine umfangreiche Verwendung mit CherryPy .. – user233864

+2

Sicher; Sie können diesen Code überall hin mitnehmen; Die einzige wichtige Sache ist, dass Sie es abonnieren, bevor Sie Quickstart ausführen. – fumanchu

-1

Dies funktioniert mit quickstart

def stopit(): 
    print 'stop handler invoked' 
    #... 
stopit.priority = 10 
cherrypy.engine.subscribe('stop', stopit)