python - 为什么方法 sys.exit()、exit()、raise SystemExit 不起作用?

标签 python multithreading sockets exit sys

我需要一个替代方法来在线程函数内终止 python 脚本。我的意图是在客户端输入 0 时终止服务器...这是否不起作用,因为线程尚未终止?这是我的代码:

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
print 'Socket created'

try:
    socket.bind((HOST, PORT))
except socket.error, message:
    print 'Bind statement failed. ERROR: ' + str(message[0]) + ' Message: ' +    message[1]
    sys.exit()

print 'Socket Binding Successful'

socket.listen(10)
print 'Socket is currently listening'


def clientThread(connection):
    while 1:
        data = connect.recv(1024)
        try:
            quit = int(data)
        except:
            quit = 3
        if quit == 0:
            print 'Closing the connection and socket...'
            connect.close()
            socket.close()
            sys.exit(); //Alternative needed here...
            break
        reply = 'Ok....' + data
        if not data:
            break
        connect.sendall(reply)


while 1: #forever loop
    connect, address = socket.accept()
    print 'Just connected with ' + address[0] + ' : ' + str(address[1])
    start_new_thread(clientThread, (connect,))

socket.close()

最佳答案

问题是 sys.exit() 所做的只是引发 SystemExit。由于这发生在工作线程中,因此效果是停止该线程(异常不会跨线程传播)。

您可以尝试通过您自己的某种机制或通过调用 thread.interrupt_main() 向主线程发出脚本需要终止的信号。 .

如需大锤式方法,请调用 os._exit() .

关于python - 为什么方法 sys.exit()、exit()、raise SystemExit 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13612434/

相关文章:

python - 是否可以在列表和元素中使用相同的切片符号来获得相同的结果?

c++ - Mutex 没有按预期工作

c++ - thread_group 中的一个线程没有被中断

c++ - 如何从 UDP 套接字 (Windows C++) 获取 IP 信息?

java - 我的服务器和客户端套接字程序只是挂起而不打印任何内容

python - Psycopg2 二进制安装到 Windows anaconda 环境中

Python:没有名为 xxx 的模块

java - 来自 socket.getInputStream() 的 ObjectInputStream

python - 在 AWS EC2 实例上使用 nginx 配置 django

c - 读取/接收线程安全 (MSG_PEEK)