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