2010-07-21 4 views
2

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

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

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

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

Thanks--

+1

Я не уверен, почему они там будут использовать лямбда. Вы можете просто передать функцию непосредственно как 'init_log' – nmichaels

ответ

2

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

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

+0

Спасибо Массимо. Я привел это в группу пользователей web2py. Вы можете взглянуть? http://groups.google.com/group/web2py/browse_thread/thread/d3b534113a904cd7 – Yarin

+0

@ massimo- Можете ли вы объяснить, как он присваивает что-то «logging» - не регистрирует модуль? – Yarin

1

Что она делает, я думаю, что функция ведения журнала "memoized". Это означает, что если он вызывается с одинаковыми аргументами несколько раз подряд, он возвращает старые результаты из своего кеша.

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

+0

Спасибо Siggy-да, это может быть слишком специфично для механизма кэширования web2py, чтобы принадлежать здесь, возможно, имитирует модуль plone, на который вы ссылаетесь. – Yarin

Смежные вопросы