Помогите с кодом Python - PullRequest
       15

Помогите с кодом Python

2 голосов
/ 21 июля 2010

Мне нужна помощь, чтобы понять, что здесь происходит.Этот код взят из models / log.py модуля в web2py и предназначен для глобального ведения журнала.

def _init_log(): 
    logger=logging.getLogger(request.application) 
    ...
    return logger 

logging=cache.ram('mylog',lambda:_init_log(),time_expire=99999999)

Может кто-нибудь объяснить, как это может работать, и каковы последниелиния делает?

Спасибо -

Ответы [ 2 ]

2 голосов
/ 22 июля 2010

Это не стандартный файл web2py.Кто-то написал это, но я вижу, что он делает: в web2py одна установка может запускать несколько приложений.Некоторые пользователи хотят, чтобы разные приложения, работающие под одним и тем же web2py, имели отдельные журналы, поэтому им нужны разные объекты регистратора.В web2py нет глобальных настроек, и весь пользовательский код выполняется при каждом запросе, поэтому, чтобы избежать повторного создания регистратора при каждом запросе, объекты регистратора создаются только один и сохраняются в кеше с большим временем истечения 999 ... 9,Когда приходит http-запрос, если ему нужно войти, он находит регистратор в кеше.Посмотрите на документы для cache.ram.

Я использовал этот трюк, но никогда для регистрации.

1 голос
/ 21 июля 2010

Мне кажется, что функция записи «запоминается». Это означает, что если он вызывается с одним и тем же аргументом несколько раз подряд, он вернет старые результаты из своего кэша.

Возможно, он основан на модуле plone.memoize , но я не смог проверить, потому что ссылка не работает для меня.

...