7

我需要一个替代方法来在线程函数中杀死 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()
4

2 回答 2

10

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

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

对于大锤方法,请调用os._exit().

于 2012-11-28T19:03:19.737 回答
-4

你可以,raise SystemExit但这似乎真的很苛刻。也许某些协作线程的方法会起作用(即:带有哨兵的队列)

于 2012-11-28T19:05:13.910 回答