我需要在线程函数内部杀死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()
答案 0 :(得分:9)
问题是所有sys.exit()
都会提升SystemExit
。由于这发生在工作线程中,效果是停止该线程(异常不会跨线程传播)。
您可以通过自己的某种机制或通过调用thread.interrupt_main()
来尝试向脚本需要终止的主线程发送信号。
对于大锤方法,请致电os._exit()
。
答案 1 :(得分:-3)
你可以raise SystemExit
,但这似乎非常严厉。也许某种合作线程可以起作用(即:带有哨兵的队列)