加载yaml配置文件两次

问题描述 投票:0回答:1

我正在跟踪并分析机器学习部署课程中的代码,我发现了一些令人困惑的事情。 (这个问题与代码的ML部分无关)

ML 管道使用配置文件中的一些值。该配置文件是一个 yaml 文件。

此 yaml 文件通过名为

core.py
的脚本提供给需要它的脚本。

这部分代码的结构是这样的

  regression
    |
    -----config
    |      \----core.py
    |
    |----config.yml
    |
    |---train.py
    |---predict.py

因此,例如

train.py
predict.py
通过

调用配置值

from config.core import config
或有时
from regression.config.core import config

core.py
文件是这样的

from pydantic import BaseModel
from strictyaml import YAML

class Config(BaseModel):
    value1: str
    value2: str

def ParseConfigFile()->YAML:
    # Here some code to parse the yaml file

def get_config()-> Config:
    parsed_config=ParseConfigFile()
    _config = Config(**parsed_config.data)
    return _config

config = get_config()
print(f"Config: {config}") #-> Originally it was not here

当我运行代码时,起初我没有注意到,但是将打印放在那里后,我注意到每次脚本导入配置时,这都会调用

get_config()
函数并再次读取 yaml。

  • 这种情况常见吗?由于它正在读取 yaml 文件,这不是很昂贵吗?或者有没有更好的方法来做到这一点并且只加载 yaml 一次?这值得吗?

还有一个小问题

  • from config.core import config
    from regression.config.core import config
    等效吗? (这个项目安装了 setup.py 和 tox 顺便说一句)
python config
1个回答
0
投票

如果配置文件在程序启动后可以更改(通过程序内的某些执行路径或某些外部活动),并且需要立即获取更改,则需要重新加载配置文件。这与配置文件格式 YAML 无关。

如果更改只能来自程序本身,那么在我看来,如果更改了配置,最好写出配置,但将数据保留在某个单例中,这样您就不必从文件重新加载它。

配置文件通常很小,但 YAML(与 msgpack、JSON 相比)加载速度相对较慢,因此应尽可能防止重新读取。

© www.soinside.com 2019 - 2024. All rights reserved.