23.11.2012 Views

Python para todos

Python para todos

Python para todos

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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 />

Para 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, <strong>para</strong> 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. Para 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 <strong>para</strong> 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 />

Para 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 <strong>para</strong> 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!