6

wxpython ui を使用して http で制御しているチェリーピー アプリがあります。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を適切に止めていないからですか?

4

2 に答える 2

10

どのようにCherryPyを停止していますか? それ自体に SIGKILL を送信することによって?少なくとも代わりに TERM を送信する必要がありますが、cherrypy.engine.exit()(バージョン 3.1+) を呼び出すことをお勧めします。どちらの手法でも、CherryPy をより適切にシャットダウンできます。これには、処理中のリクエスト (「?sigkill=1」リクエスト自体など) を終了してきれいに閉じることが含まれます。

于 2010-01-25T05:47:14.337 に答える
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", {})
于 2010-03-23T07:47:55.663 に答える