7.5.6 Objetos Thread (hilo)

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.

Thread (group=None, target=None, name=None, args=(), kwargs={})
Este constructor se ha de llamar siempre con argumentos con nombre (por clave). Los argumentos son:

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.

start ()
Inicia la actividad del 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.

run ()
Método que representa la actividad del hilo.

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.

join ([timeout])
Espera a que finalice el hilo. Esta llamada bloquea la ejecución del hilo hasta que termine el hilo cuyo método join() fue llamado, ya sea normalmente o por una excepción no capturada, o vence el plazo opcional de ejecución.

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.

getName ()
Devuelve el nombre del hilo.

setName (name)
Establece el nombre del hilo.

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.

isAlive ()
Devuelve si está vivo el hilo.

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

isDaemon ()
Devuelve el indicador de fondo del hilo.

setDaemon (daemonic)
Establece el indicador de fondo del hilo al valor lógico daemonic. Se ha de llamar a este método antes de llamar a start().

El valor inicial se toma del hilo creador.

El programa Python entero finaliza cuando no quedan hilos activos que no sean de fondo.


Ver Sobre este documento... para obtener información sobre sugerencias.