2010-12-27 21 views
30

Por cada cliente que se conecta con el servidor que generar un nuevo subproceso, así:¿Cómo cerrar un hilo desde dentro?

# Create a new client 
c = Client(self.server.accept(), globQueue[globQueueIndex], globQueueIndex, serverQueue) 

# Start it 
c.start() 

# And thread it 
self.threads.append(c) 

Ahora, sé que puedo cerrar todos los hilos que utiliza este código:

# Loop through all the threads and close (join) them 
    for c in self.threads: 
     c.join() 

Pero, ¿cómo puedo cerrar el hilo de dentro de ese hilo?

Respuesta

37

Cuando comienza un hilo, comienza a ejecutar una función que le da (si extiende threading.Thread, la función será run()). Para finalizar el hilo, simplemente regrese de esa función.

De acuerdo con this, también puede llamar al thread.exit(), que lanzará una excepción que terminará el hilo silenciosamente.

+14

thread.exit() sólo funciona con el objeto hilo, pero no con el objeto de clase threading.Thread. – moeabdol

8

Un poco tarde, pero yo uso una variable _is_running para decirle al hilo cuando quiero cerrar. Es fácil de usar, solo implementa un stop() dentro de tu clase de subprocesos.

def stop(self): 
    self._is_running = False 

Y en run() solo bucle en while(self._is_running)

0

Si desea forzar la detención de su hilo de rosca: thread._Thread_stop() Para mí funciona muy bien.

+0

Para mejorar su respuesta, debe incluir _cuando_ sea una alternativa mejor que las otras enumeradas aquí, junto con un enlace a cierta documentación que la respalde. –

0

¿Qué tal sys.exit() del módulo sys.

Si sys.exit() se ejecuta desde el interior de un hilo se va a cerrar sólo eso hilo.

Esta respuesta aquí habla de que: Why does sys.exit() not exit when called inside a thread in Python?

+0

Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la opinión] (/ reseña/mensajes de baja calidad/18724894) –

Cuestiones relacionadas