Este módulo proporciona primitivas de bajo nivel para trabajar con
hilos múltiples (también conocidos como procesos ligeros o tareas),
hilos de control múltiples que comparten su espacio global de datos. Para gestionar
la sincronización se proporcionan cerrojos simples (mutexes o semáforos
binarios).
Este módulo es opcional. Está disponible en Windows NT y '95, SGI
IRIX, Solaris 2.x y en todos los sistemas que tengan una implementación de hilos POSIX
(``pthread'').
Define las siguientes constantes y funciones:
- error
-
Se lanza en errores específicos de hilos.
- LockType
-
El tipo de dato de los cerrojos.
- start_new_thread (function, args[, kwargs])
-
Arranca un nuevo hilo. El hilo ejecuta la función function
con la lista de argumentos args (que debe ser una tupla). El argumento opcional
kwargs especifica un diccionario de argumentos por clave. Cuando finaliza la función,
el hilo finaliza silenciosamente. Cuando la función termina con una excepción no
capturada, se presenta un volcado de la pila y el hilo termina (los otros hilos que
hubiere siguen su ejecución).
- exit ()
-
Lanza la excepción SystemExit. Si no es capturada, provoca la finalización
silenciosa del hilo.
- exit_thread ()
-
Obsoleto a partir de la versión 1.5.2.
Usar exit().
Sinónimo obsoleto de exit().
- allocate_lock ()
-
Devuelve un nuevo objeto cerrojo. Más adelante se describen los métodos
de los cerrojos. El estado inicial del cerrojo es desbloqueado.
- get_ident ()
-
Devuelve el `identificador de hilo' del hilo en curso. Es un entero positivo. Su valor
carece de significado y sólo tiene la utilidad de servir de identificador único para,
por ejemplo, servir de índice en un diccionario de hilos. Los identificadores de hilo
pueden reciclarse si un hilo finaliza y se crea un hilo nuevo.
Los objetos cerrojo disponen de los siguientes métodos:
- acquire ([waitflag])
-
Sin el argumento opcional, este método adquiere el cerrojo
incondicionalmente, esperando si es necesario hasta que otro hilo
lo libere (sólo un hilo puede adquirir el cerrojo a la vez, ésa es su característica
fundamental) y devuelve
None
. Si se proporciona el argumento entero
waitflag, la acción depende de su valor. Si es cero, sólo se adquiere el cerrojo
si se puede adquirir en el instante, sin esperar. Si no es cero, se adquiere el cerrojo
incondicionalmente, tal como se describió antes. Si hay argumento de entrada, el
valor de retorno es 1
si se adquiere el cerrojo o 0
si no.
- release ()
-
Libera el cerrojo. El cerrojo debe haber sido adquirido antes, pero no necesariamente
por el mismo hilo que lo desea liberar.
- locked ()
-
Devuelve el estado del cerrojo:
1
si está adquirido por algún hilo o 0
si no.
Precauciones:
- Los hilos interactúan de modo extraño con las interrupciones: la excepción
KeyboardInterrupt será recibida por un hilo en ejecución arbitrario
(si está disponible el módulo signal,
las interrupciones siempre son recibidas por el hilo principal).
- Llamar a sys.exit() o lanzar la excepción SystemExit
equivale a llamar a exit().
- No todas las funciones que pueden bloquearse a la espera de E/S permiten
que otros hilos se ejecuten (aunque los más conocidos, time.sleep(),
file.read() y select.select() actúan del modo esperado).
- No es posible interrumpir el método acquire() sobre un cerrojo; la excepción
KeyboardInterrupt se lanza una vez adquirido el cerrojo.
- Cuando finaliza el hilo principal, es dependiente del sistema si sobreviven
los otros hilos. En SGI IRIX con la implementación de hilos nativa, sobreviven. En la mayoría
del resto de los sistemas son eliminados sin ejecutar cláusulas
try ... finally ni ejecutar los destructores de los objetos.
- Cuando el hilo principal finaliza, no realiza su limpieza final habitual
(aunque sí se ejecutan las cláusulas try ... finally)
ni se vuelcan los tampones de E/S.
Ver Sobre este documento... para obtener información sobre sugerencias.