赞
踩
logger文件
import sys from loguru import logger from app.internal.component.configer import settings def configure_logger(): """ 多进程环境,需要确保子进程能拿到正确初始化的logger实例 :return: """ logger.remove() logger.add(settings.logFilePath, rotation=settings.logRotation, retention=settings.logRetention, enqueue=True, backtrace=True, diagnose=True, level=settings.logLevel, format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {file} | {line} |{message}") logger.add(sys.stderr, enqueue=True, backtrace=True, diagnose=True, level=settings.logLevel, format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {file} | {line} | {message}") print('load logger')
main文件中调用
from app.internal.component.logger import logger
会执行print语句输出: load logger
configure_logger()
然后执行子进程
每个子进程都会有from app.internal.component.logger import logger
但没有执行print语句,且Logger.info打印的日志也没有输出
可以说明支进程加载logger时是没有真正加载那个文件的;从gpt4上得到的答案:
Python 的模块导入机制确实包含了一个缓存机制。当你第一次导入一个模块时,Python 会执行两个主要步骤:
如果你想要看到这个缓存机制的实际效果,你可以这样做:
import sys # 查看sys.modules中的条目数量 print(len(sys.modules)) # 导入一个新模块 import math # 再次查看sys.modules中的条目数量,应该增加了 print(len(sys.modules)) # 再次导入相同的模块并不会增加sys.modules中的条目数量 import math # 数量保持不变 print(len(sys.modules)) # 显示math模块的缓存对象 print(sys.modules['math'])
这个缓存机制使得模块导入在性能上更加高效,因为它避免了重复的加载和初始化过程。然而,这也意味着如果模块中有可变的状态或者执行了某些操作(比如打印信息),这些只会在第一次导入时发生。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。