"Matar" hilos en python

Daniel Garcia Moreno dani en danigm.net
Vie Feb 20 07:40:50 CET 2009


Llevo tiempo trabajando con hilos en python y varias veces me he
encontrado con un problema recurrente. Además en otras listas técnicas
he visto que este problema le ocurre a más gente, así que voy a
exponerlo aquí que seguro que alguien sabrá alguna solución.

El problema es que cuando creas un hilo en python con threading.Thread y
dentro del método run de este hilo se llama a una función bloqueante,
(ya sea leer de un socket, esperar una entrada, copiar un fichero, etc,
etc), no conozco la forma de parar ese hilo, threading.Thread no tiene
un método kill.

Hasta ahora la solución que he implementado es poniendo un bucle dentro
del método run del hilo y ese bucle tiene una condición de parada que se
activa desde el hilo principal, pero cuando la acción es bloqueante esto
no es viable.

Dejo un código de ejemplo por si no me he explicado bien:

import threading
import time

class MiHilo(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.start()

    def run(self):
        print "inicio"
        time.sleep(50)
        print "fin"


if __name__ == '__main__':
    h = MiHilo()
    print "yasta"

Cómo se podría parar esto antes de que termine el sleep?
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: Esta parte del mensaje está firmada	digitalmente
URL: <http://mail.python.org/pipermail/python-es/attachments/20090220/bbd58d7a/attachment.pgp>
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es