Как закрыть поток изнутри?
Для каждого клиента, подключающегося к моему серверу, я создаю новый поток, например:
# Create a new client
c = Client(self.server.accept(), globQueue[globQueueIndex], globQueueIndex, serverQueue )
# Start it
c.start()
# And thread it
self.threads.append(c)
Теперь я знаю, что могу закрыть все потоки, используя этот код:
# Loop through all the threads and close (join) them
for c in self.threads:
c.join()
Но как я могу закрыть поток из этого потока?
Ответы
Ответ 1
Когда вы запускаете поток, он начинает выполнять функцию, которую вы ему даете (если вы расширяете поток. threading.Thread
, функция будет run()
). Чтобы завершить поток, просто вернитесь из этой функции.
В соответствии с этим, вы также можете вызвать thread.exit()
, который выдаст исключение, которое завершит поток молча.
Ответ 2
Немного поздно, но я использую переменную _is_running
, чтобы передать поток, когда хочу закрыть. Он прост в использовании, просто реализуйте stop() внутри вашего класса потоков.
def stop(self):
self._is_running = False
И в run()
просто цикл на while(self._is_running)
Ответ 3
Как насчет sys.exit()
из модуля sys
.
Если sys.exit()
выполняется из потока, он только закрывает этот поток.
Этот ответ здесь говорит об этом: Почему sys.exit() не выходит при вызове внутри потока в Python?
Ответ 4
Если вы хотите заставить остановить свою нить:
thread._Thread_stop()
Для меня работает очень хорошо.