[pyar] threading.local..
Tordek
kedrot en gmail.com
Mie Jul 13 14:45:25 ART 2011
On 13/07/11 14:13, david weil wrote:
> Es esto un bug?
No.
pydoc _threading_local
Supongo que lo que pensabas era que cuando creas un threading.local
te devuelve el mismo local cuando estás en el mismo thread. No es
así. Cuando accedés a una propiedad de un local, te devuelve el
mismo valor si estás en un mismo thread. Si creás otro local, está
vacío.
> Si no es un bug, no entiendo como debería funcionar o para que se usa...
Con el ejemplo de pydoc:
>>> mydata = local()
>>> mydata.number = 42
>>> mydata.__dict__
{'number': 42}
>>> mydata.__dict__.setdefault('widgets', [])
[]
>>> mydata.widgets
[]
>>> log = []
>>> def f():
... items = mydata.__dict__.items()
... items.sort()
... log.append(items)
... mydata.number = 11
... log.append(mydata.number)
>>> import threading
>>> thread = threading.Thread(target=f)
>>> thread.start()
>>> thread.join()
>>> log
[[], 11]
>>> mydata.number
42
>>> mydata.widgets
[]
Creás mydata, que es un local para cada thread, y le asignás valores.
En el thread principal, mydata.number == 42, y mydata.widgets == [].
Después tenés la función f, que asigna valores a mydata. Hacés que
se ejecute en su propio thread. Podés ver que funciona correctamente
porque log (que es global) da los valores correctos.
Ahora, cuando accedés a los valores de mydata, ves que sigue
teniendo los valores originales. Esto es porque ahora estás de
vuelta en el thread principal, y esos valores pertenecen al thread
principal.
...
Con respecto a "para qué se usa"... es para cuando tenés una
variable global que se asigna en otro lado, y otro thread la puede
pisotear y sobreescribirla... pero casi todos los casos que se me
ocurren se pueden solucionar en Python mediante "no uses globales, y
devolvé múltiples valores mediante tuplas".
>
> saludosss..
> dave
>
> ps: python 2.7.1.4.. activestate..
--
Guillermo O. «Tordek» Freschi. Programador, Escritor, Genio Maligno.
http://tordek.com.ar :: http://twitter.com/tordek
http://www.arcanopedia.com.ar - Juegos de Rol en Argentina
More information about the pyar
mailing list