Так сервер перестает работать. Но при этом, нужно демонизировать поток, чтобы он закрывался вместе с основным (это кстати странно немного для меня, раньше вроде и без этого всё закрывалось, видимо что-то на низком уровне, разобраться надо):
server = Server()
thread = Thread(target=server.run_serve)
thread.daemon = True
thread.start()
thread.join() # после старта всех потоков
Спасибо за ответ. По поводу флажка - понимаю, только вот основной цикл сервера спрятан внутри self.server.serve_forever(), так что я как-то не особо понимаю, как это можно сделать (неужели придется на более низкий уровень переходить с asyncio?). Соединения все получается закрыть флажками, но сам сервер не останавливается.
По поводу потоков - их не так много. Суть в том, чтобы открыть пару серверов на разных портах и распределенно принимать клиентов. А асинхронность, соответственно, чтобы не было блокировки при принятии соединения и отсылки/получения данных.
Закрывать сервер надо асинхронно:
Соответственно переписать signal_handler, чтобы вызывал асинхронную функцию закрытия сервера:
Так сервер перестает работать. Но при этом, нужно демонизировать поток, чтобы он закрывался вместе с основным (это кстати странно немного для меня, раньше вроде и без этого всё закрывалось, видимо что-то на низком уровне, разобраться надо):