@CeBePHblY

Многопоточность Python3. Как завершить выполнение скрипта, когда приходит команда для этого?

Изучаю питон. Для обучения пишу клиент-сервер. К северу подключается много клиентов они с ним общаются. Но вот к серверу подключился админ и он посылает команду на сервер "adminexit", чтобы полностью завершить работу сервера. Попробовал сделать, но не получается, скрипт не завершается. Подскажите как сделать, чтобы работало.
#!/usr/bin/env python3
import socket
from threading import Thread, current_thread

host = "localhost"
port = 1605

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((host, port))
sock.listen(5)
print("ready")
running=True

def clientthread(conn):
	while True:
		global running
		buf = conn.recv(1024)
		buf = buf.rstrip()
		if buf.decode('utf8') == "exit":
			conn.send(b"bye")
			break
		elif buf.decode('utf8') == "get":
			conn.send(b"data")
		elif buf.decode('utf8') == "adminexit":
			conn.send(b"EXIT!")
			running=False
			break
		else:
			conn.send(b"listen")

while True:	
	if running==True:
		conn, addr = sock.accept()
		print("client connected with address " + addr[0])
		conn.send(b"hello!")
		ht = Thread(target=clientthread, args=(conn,))
		ht.start()
	else:
		break
		
conn.close()
sock.close
  • Вопрос задан
  • 1264 просмотра
Решения вопроса 2
@nirvimel
import os
os._exit(0)
Ответ написан
@epolyak
Должно помочь

....
ht = Thread(target=clientthread, args=(conn,))
ht.daemon = True
ht.start()
.....
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы