lenteur du protocole descripteur
Le
Michel Claveau - MVP

Bonjour !
Je viens de réaliser que __getattr__ est plutôt lent. Même (surtout ?)
pour des choses simples.
Exemple :
def __getattr__(self, name):
if name=='value':
return self.table.rec[self.recno][self.position]
est 8 fois plus lent qu'une méthode "value()" qui ferait la même chose,
mais, bien sûr, c'est moins souple (moins dynamique).
En cherchant à optimiser ma librairie, je suis à la recherche de solution,
et je ne trouve pas grand chose.
Quelqu'un aurait-il une idée ?
Merci d'avance.
@+
--
MCi
P.-S. le nombre d'appels, lors de l'utilisation d'un programme, est
compris entre 100 000 et 10 millions, sur des validations manuelles.
Je cherche à raccourcir la vitesse de rendu à l'utilisateur.
(cf en ergonomie, la charnière de la seconde).
Je viens de réaliser que __getattr__ est plutôt lent. Même (surtout ?)
pour des choses simples.
Exemple :
def __getattr__(self, name):
if name=='value':
return self.table.rec[self.recno][self.position]
est 8 fois plus lent qu'une méthode "value()" qui ferait la même chose,
mais, bien sûr, c'est moins souple (moins dynamique).
En cherchant à optimiser ma librairie, je suis à la recherche de solution,
et je ne trouve pas grand chose.
Quelqu'un aurait-il une idée ?
Merci d'avance.
@+
--
MCi
P.-S. le nombre d'appels, lors de l'utilisation d'un programme, est
compris entre 100 000 et 10 millions, sur des validations manuelles.
Je cherche à raccourcir la vitesse de rendu à l'utilisateur.
(cf en ergonomie, la charnière de la seconde).
Peut-être en utilisant les property (protocole Descriptors).
Ex.
class C(object):
def getx(self): return self.__x
def setx(self, value): self.__x = value
def delx(self): del self.__x
x = property(getx, setx, delx, "Documentation sur x")
Par contre, je n'ai aucune idée de ce que ça donne niveau perfs par rapport
au traitement dans __getattr__. Si tu fais des tests, tiens nous au courant.
--
Laurent POINTAL -
3 allée des Orangers - 91940 Les Ulis - France
Tél. 01 69 29 06 59