【问题标题】:Help with Python code帮助 Python 代码
【发布时间】:2010-07-21 19:28:18
【问题描述】:

我需要一些帮助来了解这里发生的事情。此代码来自 web2py 中的 models/log.py 模块,旨在允许全局日志记录。

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

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

有人能解释一下这是如何工作的,最后一行是做什么的吗?

谢谢--

【问题讨论】:

  • 我不确定他们为什么会在那里使用 lambda。您可以直接将函数传递为init_log

标签: python logging web2py


【解决方案1】:

这不是标准的 web2py 文件。 Sombody 写了它,但我可以看到它的作用: 在 web2py 中,单个安装可以运行多个应用程序。一些用户希望在同一个 web2py 下运行的不同应用程序具有单独的日志,因此他们需要不同的记录器对象。在 web2py 中没有全局设置,所有用户代码都在每个请求上执行,因此为了避免在每个请求中重新创建记录器,记录器对象只创建一个并存储在缓存中,过期时间较长 999...9 .当一个 http 请求到达时,如果它需要记录,它会在缓存中找到记录器。查看 cache.ram 的文档。

我用过这个技巧,但从来没有用于日志记录。

【讨论】:

【解决方案2】:

我认为它的作用是记录功能是“记忆化的”。这意味着如果连续多次使用相同的参数调用它,它将从其缓存中返回旧结果。

它可能基于plone.memoize 模块,但我无法检查,因为该链接对我不起作用。

【讨论】:

  • 谢谢 Siggy- 是的,这可能对 web2py 的缓存机制过于特殊,不属于这里,可能确实模仿了您所指的 plone 模块..
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
相关资源
最近更新 更多