【问题标题】:Each thread create its own logger instance, logging their own event每个线程创建自己的记录器实例,记录自己的事件
【发布时间】:2012-05-18 11:27:36
【问题描述】:

我尝试过登录 Python。看起来一旦一个日志实例由一个线程创建,它就不会被删除。但是,我的程序每分钟应该产生超过 100 个线程,并且每个线程都会创建自己的 logger,这可能会导致某种内存泄漏(logging.Logger 实例不会被垃圾收集器收集)。

谁能帮我解决这个问题,有没有办法将记录器用于多线程应用程序?

【问题讨论】:

  • 你能发布一些代码来演示这个内存泄漏吗?

标签: python multithreading logging


【解决方案1】:

在 python logging 模块中,记录器由 logging.Manager 实例管理。通常只有一个日志管理器,可用 logging.Logger.manager。记录器由其名称标识。每次您使用 logging.getLogger('name') 时,此调用都会自动转发到 logging.Logger.manager.getLogger,它包含一个记录器字典,并为每个 'name' 每次返回相同的记录器。

因此,如果您在从线程获取记录器时不使用不同的名称,那么您实际上每次都使用相同的记录器实例,而不必担心内存泄漏。

【讨论】:

  • 谢谢! mata,根据您的建议解决了问题!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
相关资源
最近更新 更多