Отключение клиента при ошибке в потоке
У меня есть несколько файлов. В основном файле есть объявление сервера:
from Utils import logger
from Sockets.Server import Server
from config import *
import os
import keyboard
keyboard.add_hotkey('alt+q', lambda: [logger.info("Abort program"), os._exit(1)])
if __name__ == '__main__':
logger.info("Starting server...")
server = Server(ip, port)
server.start()
Сервер у меня на сокете, поэтому переадресовываю клиентов на отдельные потоки:
logger.info("Listening socket...")
self.socket.listen()
logger.info("Server Started on "+self.ip+":"+str(self.port))
while True:
connection, addres = self.socket.accept()
thread = threading.Thread(target=self.handle_connection, args=(connection, addres))
self.threads+=1
thread.start()
И хотелось бы, чтобы при ошибке в потоке вызывалась функция из класса Server:
def abort_connection(self, msg, connection):
logger.info("Creating Error packet")
packet = ErrorPacket(msg)
logger.info("Sending packet...")
packet.send(connection)
logger.info("Closing connection...")
self.close_connection(connection)
def close_connection(self, connection):
connection.close()
logger.info("Connection closed")
self.threads-=1
logger.info("Thread closed")
exit()
Могу ли я как-то объявить переменную Server глобальной во всех файлах? Import - не вариант, ибо будет рекурсия импортов. Возможно стоит передавать класс сервер во все классы? Но я считаю это ужасным решением.