@Sazoks

Как удалить объект потока при его завершении?

Доброго дня!
У меня есть класс SocketServer. В нем я запускаю несколько потоков для комнат:
def __init__(self, socket_io_p, start_list_events):
        """
        Инициализатор класса.
        :param socket_io_p: Серверный сокет для общения с клиентами.
        :param start_list_events: Начальный набор событий.
        """

        # Наш серверный сокет.
        self.__socket_io = socket_io_p

        # Запускаем обработчики.
        self.client_join_room = self.__socket_io.on("join")(self.__client_join_room)
        self.client_leave_room = self.__socket_io.on("leave")(self.__client_leave_room)

        # Начальный набор трансляций и список комнат.
        # По ходу работы будет изменяться в размерах из-за добавления
        # или завершения трансляций.
        self.__event_threads = []
        self.__list_rooms = []
        for i, event in enumerate(start_list_events):
            self.__list_rooms.append(event.room)
            self.__event_threads.append(Thread(target=self.__room_thread,
                                               args=(event,)))
            self.__event_threads[i].start()
            print(f"{event.room} started")


Здесь есть список комнат (потоков) - self.__list_rooms. Но мне жизненно необходимо, чтобы при завершении своей работы сам объект Thread в этом списке удалялся.

В методе self.__room_thread я прописал следующее, но сразу одернул себя за рукав, осознав, что это полная глупость (я предполагаю):
with Lock():
            # По окончании трансляции удаляем комнату и поток.
            for i, room in enumerate(self.__list_rooms):
                if room == current_room:
                    self.__event_threads.pop(i)
                    self.__list_rooms.pop(i)
                    print(f"{room} deleted")
                    break


Просто через мьютекс обращаюсь к списка и удаляю нужные данные. Но я подумал, что получается объект удалит сам себя, хотя работу до конца еще не завершил.

В общем, надо удалить объект Thread() из списка при завершении потока.

Спасибо за ответы!
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dmtrrr
Backend developer
Я не запускал код


это интересный подход к разработке

надо удалить объект Thread() из списка при завершении потока.


А какой смысл в том, чтобы добавлять этот объект в список?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы