URL: https://linuxfr.org/forums/programmation-python/posts/cout-de-l-introspection Title: Coût de l’introspection Authors: Marotte ⛧ Date: 2018年05月28日T23:12:21+02:00 License: CC By-SA Tags: inspect et optimisation Score: 2 Bonjour à tous, J’ai une fonction qui se charge d’écrire des messages dans un fichier (les logs de mon application). Cette fonction peut être utilisée par différents objets. Donc pour avoir le maximum d’information dans mes logs, cette fonction fait appel à la fonction _currentframe()_ du module _inspect_ : ```python from inspect import currentframe class Logger: """Log messages.""" def __init__(self): self.logfile = sys.stderr self.log_time = False def __del__(self): self.logfile.close() def log(self, message, level = 0, f = None): """Write a message to the logger’s output if its criticity is over the chosen level.""" prefix = '' info = '[{}|{}]'.format(str(level),str(currentframe().f_back.f_locals['self'])) if self.log_time: prefix = '{} {:12s} '.format(strftime("%Y-%m-%d %H:%M:%S"),info) if level>= self.level: if f: print(prefix+str(message), file=f) else: print(prefix+str(message), file=self.logfile) self.flush() ``` J’appelle donc `inspectcurrentframe().f_back.f_locals['self']` à chaque fois que j’écris un message dans les log... L’objet qui appelle a sa fonction `__str()__` définie ainsi : ```python def __str__(self): return self.name ``` comme ça j’ai le nom de l’objet concerné pour chaque ligne de log, sans avoir à passer par un argument à chaque fois. L’import du module _inspect_ et cet appel à _currentframe()_ ont forcément un coût mais j’ai du mal à l’évaluer ou à trouver des informations sur le sujet... Est-ce selon vous un luxe dont je devrais absolument me passer ou bien ce serait de l’optimisation précoce et malvenue de ce soucier de ça au début d’un projet ? Je peux bien sûr mettre une option pour ça, mais la question devient alors : quel choix par défaut pour cette option ? :) Là il s’agit seulement d’avoir des logs plus parlant... mais au delà de ce cas précis... la question qui je me pose est la suivante : puis-je me reposer sur le module _inspect_ sur un plan fonctionnel, ou bien est-ce une mauvaise idée ?

AltStyle によって変換されたページ (->オリジナル) /