2010-01-05 6 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... 

`

यह जारी रहता है कभी नहीं .. तो मैं बच्चे के धागे को बंद करने के लिए मजबूर करना चाहता हूं ...

मुझे पता है क्योंकि मेरा आवेदन अपने स्वयं के धागे का उपयोग कर रहा है और मुझे लगता है कि चेरीपी चाहता है कि उन थ्रेडों को चेरीपी के साथ छोड़ दें .... क्या मैं इसे दूर कर सकता हूं ?

+0

मुझे लगता है कि करने के लिए मैं CherryPy की स्वत: पुनः लोड अपने ही client.thread को मारने के लिए ओवरलोड चाहिए शुरू कर साथ काम करता है ... लेकिन यह कैसे, मुझे नहीं 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/BuiltinPlugins और http://www.cherrypy.org/wiki/CustomPlugins देखें अधिक जानकारी के लिए।

+1

ठीक है। मैं इस पर गौर करूंगा। मैं क्विकस्टार्ट विधि का उपयोग कर रहा हूँ। क्या मैं अपनी रूट क्लास के अंदर इन स्टार्ट और स्टॉप विधियों को रख सकता हूं जिन्हें मैं cherrypy.quickstart() के साथ उपयोग करता हूं? या आप मुझे बता सकते हैं कि मैं इस कक्षा MyFeature() का उपयोग कैसे करूँगा, मेरे पहले से ही रूट क्लास के साथ मैं रूट() का उपयोग कर रहा हूं .. क्षमा करें, मैंने चेरीपी के साथ व्यापक उपयोग नहीं किया है .. – user233864

+2

ज़रूर; आप उस कोड को कहीं भी कहीं भी डाल सकते हैं; एकमात्र महत्वपूर्ण बात यह है कि आप क्विकस्टार्ट चलाने से पहले इसे सब्सक्राइब करते हैं। – fumanchu

-1

यह त्वरित प्रारंभ

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