[pyar] threading.local..

david weil tenuki en gmail.com
Mie Jul 13 15:34:41 ART 2011


2011/7/13 Tordek <kedrot en gmail.com>:
> On 13/07/11 14:13, david weil wrote:
>> 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.


Ahh.. ahi entendí!!
Gracias!


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

Claro, para poder parchear el código que usa globales, facilmente!

Gracias!
dave
-- 
 There is no dark side of the moon really. Matter of fact it's all dark.



More information about the pyar mailing list