Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lenteur du protocole descripteur

1 réponse
Avatar
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).

1 réponse

Avatar
Laurent Pointal
Michel Claveau - MVP wrote:

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 ?



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