开发者

stopping a cherrypy server over http

开发者 https://www.devze.com 2022-12-18 02:38 出处:网络
I have a cherrypy app that I\'m controll开发者_如何学编程ing over http with a wxpython ui. I want to kill the server when the ui closes, but I don\'t know how to do that. Right now I\'m just doing a s

I have a cherrypy app that I'm controll开发者_如何学编程ing over http with a wxpython ui. I want to kill the server when the ui closes, but I don't know how to do that. Right now I'm just doing a sys.exit() on the window close event but thats resulting in

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)

is that because I'm not stopping cherrypy properly?


How are you stopping CherryPy? By sending a SIGKILL to itself? You should send TERM instead at the least, but even better would be to call cherrypy.engine.exit() (version 3.1+). Both techniques will allow CherryPy to shut down more gracefully, which includes allowing any in-process requests (like your "?sigkill=1" request itself) to finish up and close cleanly.


I use os._exit. I also put it on a thread, so that I can serve up a "you've quit the server" page before exiting.

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

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

精彩评论

暂无评论...
验证码 换一张
取 消