Esta clase representa una actividad que se ejecuta en un hilo de control separado. Hay dos modos de especificar la actividad: pasando un objeto ejecutable (con un método __call__) o redefiniendo el método run() en una subclase. No se debe redefinir ningún otro método (salvo el constructor) en una subclase. En otras palabras, sólo se debe redefinir los métodos __init__() y run() de esta clase.
Una vez creado el objeto hilo, su actividad debe iniciarse llamando a su método start(). Esto provocará una llamada al método run() en un hilo de control separado.
Una vez iniciada la actividad del hilo, el hilo se considera 'vivo' y 'activo' (estos conceptos son casi sinónimos; su definición es vaga a propósito). Deja de estar vivo y activo cuando su método run() finaliza su ejecución, ya sea normalmente o por una excepción no capturada. El método isAlive() comprueba si el hilo está vivo.
Otros hilos pueden llamar al método join() de un hilo. Esto bloquea el hilo hasta que el hilo cuyo método join() fue invocado termine.
Un hilo tiene un nombre. El nombre se puede pasar en el constructor, asignar con el método setName() y recuperar con el método getName().
Se puede indicar que un hilo es ``de fondo''. Este indicador marca al intérprete de Python que puede finalizar su ejecución global aunque la tarea (y todas las tareas marcadas como de fondo) esté activa. El valor inicial de este indicador se hereda del hilo creador. Se puede establecer el valor del indicador con el método setDaemon() y recuperar con el método getDaemon().
Existe un objeto ``hilo principal'', que corresponde al hilo inicial de control del programa Python. No es un hilo de fondo.
Existe la posibilidad de que se creen ``objetos hilo ficticios''. Son objetos hilo correspondientes a ``hilos forasteros''. Éstos son los hilos iniciados desde fuera del módulo threading, por ejemplo, directamente desde C. Los objetos hilo ficticios tienen una funcionalidad limitada. Se consideran siempre vivos, de fondo y no tienen la funcionalidad de join(). Nunca se borran, pues es imposible detectar la terminación de hilos forasteros.
group
Debe ser None
. Está reservado para una extensión futura, cuando se implementen los grupos
de hilos en una clase ThreadGroup.
target
Destino. Objeto ejecutable que será invocado por el método run().
El valor por omisión es None
, que indica que no se ejecuta nada.
name El nombre del hilo. Por omisión, se construye un nombre único de la forma ``Thread-N'' donde N es un número decimal pequeño.
args
Tupla de argumentos para la invocación del destino. El valor predeterminado
es ()
.
kwargs
Diccionario de argumentos por clave para la llamada al destino.
El valor predeterminado es{}
.
Si la subclase redefine el constructor, debe asegurarse de llamar al
constructor de la clase base (Thread.__init__()
)
antes de hacer nada con el hilo.
Debe llamarse a lo sumo una vez por objeto hilo. Hace las gestiones para que se llame al método run() del objeto es un hilo de control separado.
Se puede redefinir este método en una subclase. El método run() estándar ejecuta el objeto que se pasó al constructor en como argumento target, de haberlo, con argumentos secuenciales y por clave tomados de los argumentos args y kwargs, respectivamente.
Si está presente el argumento timeout y no es None
, debe
ser un número en coma flotante que especifique un plazo de ejecución de
la operación en segundos.
Es posible llamar al método join() de un hilo desde varios otros hilos.
Un hilo no puede llamar a su propio join(), pues causaría un bloqueo irresoluble.
Es incorrecto intentar llamar al método join() de un hilo antes de que éste arranque.
El nombre es una cadena que se utiliza sólo a efectos de identificación. No tiene significado propio. Es posible dar el mismo nombre a varios hilos. El nombre inicial se establece en el constructor.
A grandes rasgos, un hilo está vivo desde el momento que retorna la llamada a start() hasta que finaliza la ejecución de su método run().
El valor inicial se toma del hilo creador.
El programa Python entero finaliza cuando no quedan hilos activos que no sean de fondo.