Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Datos globales independientes<br />
Threads<br />
Como ya hemos comentado los threads comparten las variables<br />
globales. Sin embargo pueden existir situaciones en las que queramos<br />
utilizar variables globales pero que estas variables se comporten como<br />
si fueran locales a un solo thread. Es decir, que cada uno de los threads<br />
tengan valores distintos independientes, y que los cambios de un determinado<br />
thread sobre el valor no se vean reflejados en las copias de los<br />
demás threads.<br />
<strong>Para</strong> lograr este comportamiento se puede utilizar la clase threading.<br />
local, que crea un almacén de datos locales. Primero debemos crear<br />
una instancia de la clase, o de una subclase, para después almacenar y<br />
obtener los valores a través de parámetros de la clase.<br />
datos_locales = threading.local()<br />
datos_locales.mi_var = “hola”<br />
print datos_locales.mi_var<br />
Fijémonos en el siguiente código, por ejemplo. <strong>Para</strong> el hilo principal el<br />
objeto local tiene un atributo var, y por lo tanto el print imprime su<br />
valor sin problemas. Sin embargo para el hilo t ese atributo no existe, y<br />
por lo tanto lanza una excepción.<br />
local = threading.local()<br />
def f():<br />
print local.var<br />
local.var = “hola”<br />
t = threading.Thread(target=f)<br />
print local.var<br />
t.start()<br />
t.join()<br />
Compartir información<br />
<strong>Para</strong> compartir información entre los threads de forma sencilla podemos<br />
utilizar la clase Queue.Queue, que implementa una cola (una<br />
estructura de datos de tipo FIFO) con soporte multihilo. Esta clase<br />
utiliza las primitivas de threading para ahorrarnos tener que sincronizar<br />
el acceso a los datos nosotros mismos.<br />
111