2010-07-21 8 views
2

J'ai besoin d'aide pour comprendre ce qui se passe ici. Ce code provient d'un module models/log.py dans web2py, et est destiné à permettre la journalisation globale. Quelqu'un peut-il expliquer comment cela pourrait fonctionner, et ce que la dernière ligne est en train de faire?Aide avec le code Python

Thanks--

+1

Je ne sais pas pourquoi ils utiliseraient lambda là-bas. Vous pouvez simplement passer la fonction directement en tant que 'init_log' – nmichaels

Répondre

2

Il ne s'agit pas d'un fichier web2py standard. Sombody l'a écrit mais je peux voir ce qu'il fait: En web2py une seule installation peut exécuter plusieurs applications. Certains utilisateurs souhaitent que des applications différentes s'exécutent sous le même web2py pour avoir des journaux distincts. Par conséquent, ils ont besoin d'objets de journalisation différents. Dans web2py il n'y a pas de paramètres globaux et tout le code utilisateur est exécuté sur chaque requête afin d'éviter de recréer le logger à chaque requête, les objets du logger sont créés seulement et stockés dans le cache avec un temps d'expiration important 999 ... 9 . Lorsqu'une requête http arrive, si elle doit se connecter, elle trouve l'enregistreur dans le cache. Regardez les documents pour cache.ram.

J'ai utilisé cette astuce, mais jamais pour la journalisation.

+0

Merci Massimo- J'ai apporté ceci dans le groupe d'utilisateurs web2py. Pouvez-vous jeter un coup d'oeil? http://groups.google.com/group/web2py/browse_thread/thread/d3b534113a904cd7 – Yarin

+0

@ massimo- Pouvez-vous expliquer comment attribuer quelque chose à la «consignation» - n'enregistre-t-on pas un module? – Yarin

1

Ce qu'il fait, je pense, est que la fonction d'enregistrement est "memoized". Cela signifie que s'il est appelé avec les mêmes arguments plusieurs fois de suite, il retournera les anciens résultats de son cache.

Il pourrait être basé sur le module plone.memoize, mais je n'ai pas pu vérifier parce que le lien ne fonctionne pas pour moi.

+0

Merci Siggy- ouais cela pourrait être trop spécifique au mécanisme de mise en cache de web2py pour appartenir ici, probablement imiter le module plone auquel vous faites référence .. – Yarin