http

2010-01-23 12 views
6

पर एक चेरीपी सर्वर को रोकना मेरे पास एक चेरी ऐप है जिसे मैं एक wxpython ui के साथ http पर नियंत्रित कर रहा हूं। जब यूई बंद हो जाता है तो मैं सर्वर को मारना चाहता हूं, लेकिन मुझे नहीं पता कि यह कैसे करना है। अभी मैं सिर्फ विंडो बंद घटना पर एक sys.exit() कर रहा हूँ लेकिनhttp

Traceback (most recent call last): 
    File "ui.py", line 67, in exitevent 
    urllib.urlopen("http://"+server+"/?sigkill=1") 
    File "c:\python26\lib\urllib.py", line 87, in urlopen 
    return opener.open(url) 
    File "c:\python26\lib\urllib.py", line 206, in open 
    return getattr(self, name)(url) 
    File "c:\python26\lib\urllib.py", line 354, in open_http 
    'got a bad status line', None) 
IOError: ('http protocol error', 0, 'got a bad status line', None) 

में जिसके परिणामस्वरूप thats है कि क्योंकि मैं cherrypy ठीक से रोक नहीं कर रहा हूँ?

उत्तर

7

आप चेरीपी को कैसे रोक रहे हैं? खुद को एक सिगिल भेजकर? आपको कम से कम टीईआरएम भेजना चाहिए, लेकिन cherrypy.engine.exit() (संस्करण 3.1+) को कॉल करना बेहतर होगा। दोनों तकनीकें चेरीपी को अधिक सुन्दर तरीके से बंद करने की अनुमति देगी, जिसमें किसी भी इन-प्रोसेस अनुरोध (जैसे आपके "? सिगकिल = 1" अनुरोध स्वयं) को साफ करने और साफ करने की अनुमति शामिल है।

3

मैं os._exit का उपयोग करता हूं। मैंने इसे थ्रेड पर भी रखा है, ताकि मैं बाहर निकलने से पहले "आपने सर्वर छोड़ दिया है" पृष्ठ को पूरा कर सकें।

class MyApp(object): 
    @cherrypy.expose 
    def exit(self): 
     """ 
     /exit 
     Quits the application 
     """ 

     threading.Timer(1, lambda: os._exit(0)).start() 
     return render("exit.html", {}) 

 संबंधित मुद्दे