Как закрыть поток изнутри?

Для каждого клиента, подключающегося к моему серверу, я создаю новый поток, например:

# Create a new client c = Client(self.server.accept(), globQueue[globQueueIndex], globQueueIndex, serverQueue ) # Start it c.start() # And thread it self.threads.append(c) 

Теперь я знаю, что я могу закрыть все потоки, используя этот код:

  • Является ли переменная swap гарантированной атомарной в python?
  • Эквивалент setInterval в python
  • Python - одновременно запускать две команды
  • Есть ли хороший способ избежать глубокой копии памяти или сократить время, затрачиваемое на многопроцессорную обработку?
  • Как комбинировать python asyncio с потоками?
  • Вложение python в многопоточное приложение C
  •   # Loop through all the threads and close (join) them for c in self.threads: c.join() 

    Но как я могу закрыть поток изнутри этого потока?

  • Открытие EXE моей программы Pygame дает мне ошибки импорта
  • Аргументы строки Threading Python
  • Время python utc минус 5 минут
  • Загрузка обученной модели Keras и продолжение обучения
  • Эквивалент Python && (логический и) в выражении if
  • Подсчет автомобилей OpenCV + Python Issue
  • 3 Solutions collect form web for “Как закрыть поток изнутри?”

    Когда вы начинаете поток, он начинает выполнять функцию, которую вы ему даете (если вы расширяете threading.Thread , функция будет run() ). Чтобы закончить поток, просто вернитесь от этой функции.

    В соответствии с этим вы также можете вызвать thread.exit() , который будет генерировать исключение, которое закончит поток бесшумно.

    Немного поздно, но я использую переменную _is_running чтобы сообщить поток, когда хочу закрыть. Он прост в использовании, просто реализуйте stop () внутри вашего класса потоков.

     def stop(self): self._is_running = False 

    И в run() просто while(self._is_running)

    Если вы хотите заставить остановить свою нить: thread._Thread_stop() Для меня работает очень хорошо.

    Python - лучший язык программирования в мире.