13.04.2017 Views

Python Para Todos

Guia Basica de Programacion eusando Pyton

Guia Basica de Programacion eusando Pyton

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!