Подтвердить что ты не робот

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

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

# 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()

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

def stop(self):
  self._is_running = False

И в run() просто цикл на while(self._is_running)

Ответ 4

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