SocketServer永远不会退出

时间:2015-02-05 20:13:44

标签: python python-2.7 socketserver

我正在使用SocketServer启动一个简单的TCP服务器:

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
    pass
...
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
server_thread = threading.Thread(target=server.serve_forever)
server_thread.daemon = True
server_thread.start()
try:
...
finally:
    server.shutdown()

然而,在程序结束后它不会终止并且似乎被卡住。它不响应键盘事件(CTRL-C),退出的唯一方法是调用os._exit(0)或关闭shell窗口。

我已经对它进行了一些搜索,但我仍然没有看到我错过的内容:该线程被标记为守护进程,并且服务器在最后关闭。

我在Windows 8.1下运行Python 2.7.9

1 个答案:

答案 0 :(得分:0)

Ctrl-c引发KeyboardInterrupt异常,问题是SocketServer内部捕获错误,但从不烦恼。您可以为signal.SIGINT&添加额外的信号处理程序。然后拨打server.start()。 像这样,

import signal
import sys
def signal_handler(signal, frame):
     logger.log("DEBUG","You pressed Ctrl+C!")
     server.stop()
     sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
server_thread.start()
signal.pause()