我正在使用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
答案 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()