gpt4 book ai didi

python - SocketServer 永不退出

转载 作者:行者123 更新时间:2023-12-05 07:56:40 38 4
gpt4 key购买 nike

我正在使用 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/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com