|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
Bonjour,
côté performance, vaut-il mieux éviter d'utiliser __getattribute__ ? |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 710 ![]() |
Salut,
La réponse est "oui". - W
__________________
Architectures Post-Modernes |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
Salut.
Du coup, il vaut mieux passer par une méthode personnelle appellant la bonne méthode suivant la valeur d'une chaîne. D'où sais-tu que c'est chronophage ? Python doit-il à chaque fois analyser la classe ? Un dictionnaire n'est-il pas créé automatiquement ? |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 710 ![]() |
__getattribute__ sera toujours appelé que l'attribut soit méthode ou pas.
C'est dans le corps de la fonction __getattribute__ qu'on ira regarder dans des dict pour savoir quoi retourner. Ca fait quand même pas mal d'indirections (et d'overheads) pour juste retourner une méthode ou un attribut. __getattr__ n'est appelé lorsque le nom n'est pas dans le dict. Une optimisation possible dans certains cas est d'ajouter le nom/valeur dans le dict lors du premier appel: la résolution du nom suivante tapera directement dans le dict plutôt que de passer par l'indirection __getattr__. - W
__________________
Architectures Post-Modernes |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
J'ai du mal à te suivre. Peux-tu juste donner un exemple un peu fictif pour clarifier ton propos (si tu as 5 min).
As-tu sous la main un script prouvant ce que tu avances ? |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 710 ![]() |
__________________
Architectures Post-Modernes |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
Au temps pour moi, je plaide coupable...
|
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 710 ![]() |
Et si vous preniez le temps de raconter votre besoin et l'intérêt de passer par une redirection? Cela permettrait d'avoir une discussion plus intéressante que RTFM.
- W
__________________
Architectures Post-Modernes |
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
Citation:
Pour la (petite) histoire, j'ai finalisé la partie résolution de mon sudoku, et maintenant que j'ai un truc qui marche pas trop mal, je veux partir à la recherche des optimisations possibles. Par exemple, j'avais une première version qui était très lente. Je me suis rendu compte que je demandais trop à Python de créer des classes sudoku. Ensuite est venu mon questionnent sur __getattribute__ que j'ai utilisé par commodité. |
|
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 710 ![]() |
Salut,
J'ai quelque difficultés à suivre: Citation:
La résolution d'un sudoku étant une fonction récursive, pas facile de comprendre la création de plein d'instances: quelques variables globales et des fonctions ancillaires pour (re-)initialiser la chose devraient suffire. Citation:
Aurez vous le courage de poster votre code? Je ne sais pas si j'aurais le temps de le regarder d'ici le week end mais c'est tout ce que je peux offrir. - W
__________________
Architectures Post-Modernes |
||
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
Bonne rectification.
T'inquiètes, je vais faire le ménage tout seul comme un grand. Le seul moment où je crée Plus intéressant, la dite méthode ne semble pas avoir besoin de faire d'énumération brutale ! Elle a juste besoin de voir ce qu'il se passe uniquement au niveau directement supérieur de l'arbre de recherche. Je vois comment éviter de créer inutilement des instances de classe via une simple pile. Je n'ai juste pas le temps de le faire pour le moment (je bosse dur sur un projet info qui demande pas mal de rédaction au propre très chronophage). PS : je mettrais le code en ligne sous peu. Le 16 mars au plus tard, c'est sûr. |
|
|
00
|
|
|
#12 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 710 ![]() |
J'espère que vous avez pris le temps de lire la prose de Peter Norvig (que j'avais mentionné dans un autre post sur l'interface graphique). Il a fait des millions de tests de résolution de grilles et constate:
Citation:
- W
__________________
Architectures Post-Modernes |
|
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
Merci pour cette indication !
![]() Mon programme permet aussi de classer des grilles, et j'ai une méthode purement rationnelle (en fait, c'est une conjecture bien solide que je fais). De plus, mes tests en temps ont été fait avec des grilles n'ayant que 17 indices, soit deux fois moins que ce que l'on trouve dans les livres. En toute rigueur, il faudrait comparer avec les mêmes grilles (pas la patience de faire le tri dans ce fouillis d'explications dans la page mentionnée). Ceci étant entre 0,3 secondes et 0,1 secondes c'est un peu une course à l'échalote mais je regarderais la semaine prochaine tranquillement si je peux faire mieux. |
|
|
00
|
|
|
#14 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 710 ![]() |
Citation:
Si on peut espérer un gagner un facteur 3 en optimisant. Pour gagner un facteur 30, il faudra oser remettre à plat le design. - W
__________________
Architectures Post-Modernes |
|
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
On verra... Ce n'est pas mon graal de toute façon.
|
|
|
00
|
|
|
#16 | |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
Citation:
Ceci explique la différence de temps. Je viens de rajouter un mode pour s'arrêter dès qu'une solution est trouvée. Je vais tester cela sous peu. |
|
|
|
00
|
|
|
#17 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 710 ![]() |
Citation:
- W
__________________
Architectures Post-Modernes |
|
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
Justement en parlant de construction, je vais m'attaquer à ce problème. C'est aussi dans cette optique que j'ai fait ce programme.
|
|
|
00
|
|
|
#19 |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
Pour info, les meilleures performances sont maintenant de 0,08s en moyenne avec un maximum de 3,9 s.
|
|
|
00
|
|
|
#20 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 710 ![]() |
Citation:
- W
__________________
Architectures Post-Modernes |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com