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).
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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 - laurent.pointal@laposte.net
3 allée des Orangers - 91940 Les Ulis - France
Tél. 01 69 29 06 59
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