остановка cherrypy сервера по http

У меня есть cherrypy приложение, которым я управляю по http с wxpython ui. Я хочу уничтожить сервер, когда ui закрывается, но я не знаю, как сделать это. Прямо сейчас я просто делаю sys.exit () на окне близкое событие, но это приводит к

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)

это вызвано тем, что я не останавливаю cherrypy правильно?

6
задан d.c 23 January 2010 в 23:24
поделиться

2 ответа

Как вы останавливаете Cherrypy? Отправляя SIGKILL для себя? Вместо этого вы должны отправить срок по крайней мере, но даже лучше будет звонить Cherrypy.engine.exit () (версия 3.1+). Обе методы позволят Cherrypy выключить более изящно, что включает в себя предоставлять какие-либо запросы в процессе (например, ваш запрос «? SIGKILL = 1»), чтобы закончить и закрывать чисто.

8
ответ дан 9 December 2019 в 22:34
поделиться

Я использую 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", {})
3
ответ дан 9 December 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: