python - 每个线程创建自己的记录器实例,记录自己的事件

标签 python multithreading logging

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

任何人都可以帮助我吗?有没有办法将记录器用于多线程应用程序?

最佳答案

在 python logging 模块中,记录器由 logging.Manager 实例管理。通常只有一个日志管理器,可用作 logging.Logger.manager。记录器通过其名称进行识别。每次使用 logging.getLogger('name') 时,此调用都会实际转发到 logging.Logger.manager.getLogger ,它保存记录器的字典并返回相同的记录器每次都针对每个'name'

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

关于python - 每个线程创建自己的记录器实例,记录自己的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10651801/

相关文章:

python - 如何使字符串中的所有内容都小写

java - 是否可以通过在 run() 方法中调用 run() 来启动线程?

java - log4j2 中基于时间的触发策略

python - 如何避免使用 __init__ 方法的全局变量和静态方法?

python - 使用类和函数在命令行中调试 Python

Python Pandas Groupby 计数错误

c# - 从另一个线程或技巧访问 HttpSessionState (HttpContext.Current.Session)?

c++ - 线程和结构通信

java - 如何读取和复制 HTTP servlet 响应输出流内容以进行日志记录

mysql - 在 MySQL 中记录锁