GIL e hyperthreading
Ernesto Revilla
aerd en retemail.es
Vie Mar 26 11:17:03 CET 2004
Hola,
me ha despertado curiosidad, pero veo difícil bloquear y desbloquear automáticamente el acceso a los atributos o variables de una clase, por la sigiuente razón:
cuando accedemos leemos o accedemos referencias. En este caso, un __setattri__ podría bloquear y desbloquear automáticamente el acceso, pero en muchos casos, es una estructura, como un diccionario o una lista sobre la cual se realizan operaciones. Entiendo que en este caso, la solución podrían ser estructuras que se bloquean o desbloquean automáticamente. Más interesante, sin embargo, me parece marcar, como en Java, que determinados métodos acceden a 'información sensible'. Se fuerza entonces que toda la información sensible sea accedida a através de métodos del objeto, nunca directamente desde fuera (ej. poniendo __ ). Entonces, el call de ese método al empezar obtiene el acceso exclusivo, y cuando termine lo suelta.
Suponiendo que haya:
class MiClase:
def __init__(self):
self.__informacionSensible=[]
def agregarInfoAInformacionSensible(self, masInfo):
self.__informacionSensible.append(masInfo)
def consumirInfoDeInformacionSensible(self):
return self.__informacionSensible.pop()
La metaclase podría hacer entonces:
* agregar un lock a la clase
* renombrar cada uno de esos metodos 'synchronized' poniendo dos __ delante
* crear una funcion que realiza el acquire, despues la llamada a la funcion, y despues release:
def synchronizedMethodCall(self, methodName, *args, **kwargs):
self.__lock.acquire()
try:
res=getattr(self, "__"+methodName)(*args,**kwargs)
finally:
self.__lock.release()
return res
con lo que cada función 'synchronized' será ahora:
lambda self, *args, **kwargs: self.synchronizedMethodCall(methodName='<nombre del metodo>', *args, **kwargs)
siempre que se desee que todos esos métodos tengan un lock común, de lo contrario podría agregarse un lock a cada método synchronized.
Desde luego, me parecía una interesante extensión a Python. Quizá estaría bien tener algo como los atributos de C# y que la librería vaya implementando poco a poco una serie de esos atributos.
Saludos, Erny
----- Original Message -----
From: "Chema Cortes" <py en ch3m4.org>
To: "La lista de python en castellano" <python-es en aditel.org>
Sent: Friday, March 26, 2004 10:05 AM
Subject: Re: [Python-es] GIL e hyperthreading
Hernan Foffani escribió:
> El caso de uso de esa metaclase podría ser algo así:
>
> class Cuenta(object):
> __metaclass__ = autolock
>
> def retiro(self, cantidad):
> if (self.saldo > cantidad):
> self.saldo -= cantidad
>
> retiro.synchronized = True
>
> No está mal, no?
De aquel artículo recuerdo que hablaba de crear un "wrapper" para los
atributos, así que supongo que la metaclase empleaba el método
__getattribute__ para que quedara más "transparente".
> Paso de implementar autolock. Se lo dejo a alguno que le
> apasionen las metaclases y que le interese el desafío...;-)
Es un tema apasionante que habrá que seguir estudiando. Lástima que
falte tiempo para dedicarse a ello.
Muchas gracias por las explicaciones.
--------------------------------------------------------------------------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es
Más información sobre la lista de distribución Python-es