2010-01-05 8 views
9

글쎄, 내 프로그램이 자체 스레드가 있기 때문에 "자식 스레드 대기 종료"대신 자동 재로드의 모든 자식 스레드를 죽이기를 원합니다. . ... 강제 CherryPy 자식 스레드

[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... 
이 계속 결코

`

`

을 CherryPy는 한 줄에 매달려 계속하고 나는 '자식 스레드가'종료 얻기 위해 무엇을 해야할지하지 않습니다 .. 그래서 자식 스레드를 강제로 닫고 싶습니다 ...

내 응용 프로그램이 자체 스레드를 사용하고 있기 때문에 cherrypy가 CherryPy와 함께 종료 할 스레드를 원한다고 생각합니다.이 문제를 극복 할 수 있습니까? ?

+0

나는 내 자신의 client.thread을 죽일 CherryPy의 자동 장전에 과부하를해야한다고 생각하기 시작하고 작동 ...하지만 어떻게, 내가 KNO 해달라고. – user233864

답변

11

당신은 당신의 스레드를 중지 코드를 작성하고, '정지'이벤트에 대한 리스너로 등록해야합니다

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

은 자세한 내용은 http://www.cherrypy.org/wiki/BuiltinPluginshttp://www.cherrypy.org/wiki/CustomPlugins를 참조하십시오.

+1

오케이. 나는 이것을 조사 할 것이다. 빠른 시작 방법을 사용하고 있습니다. cherrypy.quickstart()와 함께 사용하는 루트 클래스에 이러한 시작 및 중지 메소드를 넣을 수 있습니까? 또는이 클래스 MyFeature()를 어떻게 사용하는지 루트() 클래스를 사용하고 있다고 말할 수 있습니까? 죄송합니다. CherryPy에서 광범위하게 사용하지 않았습니다. – user233864

+2

확실히; 당신은 당신이 좋아하는 곳에 그 코드를 둘 수 있습니다; 유일한 중요한 것은 빠른 시작을 실행하기 전에 구독하는 것입니다. – fumanchu

-1

이것은 빠른 시작

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