作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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
最佳答案
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()
关于python - SocketServer 永不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28353171/
我是一名优秀的程序员,十分优秀!