引言
作为一个python新手,我偶尔会遇到一些奇怪的问题。
最近遇到一个奇怪的问题,python中的logging为什么会输出重复日志?
经过排查发现,python中的module并不是只被import一次的,从而导致我们的logger组件会输出重复日志。
所以说: 基于module import机制的单例是不可靠的,有可能会被多次import从而创建出多个实例。
下面简单和大家分享一下。
问题描述
之前看到过文章,说python中的包只会被import一次,所以可以用module内的全局变量来实现单例。 参考链接:Python单例模式终极版
但是我的这个case发现并不是如此,我们有一个logger.py放在log这个目录下,然后外部有两个py文件对它进行import。代码结构如下:
.
├── README.md
├── log
│ ├── __init__.py
│ └── logger.py
├── main.py
└── util.py
其中logger.py的代码如下:
import logging
import logging.handlers
def get_logger():
logger = logging.getLogger("a")
logger.setLevel(logging.DEBUG)
stdout_handler = logging.StreamHandler()
logger.addHandler(stdout_handler)
return logger
logger = get_logger()
<