我正在跟踪并分析机器学习部署课程中的代码,我发现了一些令人困惑的事情。 (这个问题与代码的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。
还有一个小问题
from config.core import config
和 from regression.config.core import config
等效吗? (这个项目安装了 setup.py 和 tox 顺便说一句)如果配置文件在程序启动后可以更改(通过程序内的某些执行路径或某些外部活动),并且需要立即获取更改,则需要重新加载配置文件。这与配置文件格式 YAML 无关。
如果更改只能来自程序本身,那么在我看来,如果更改了配置,最好写出配置,但将数据保留在某个单例中,这样您就不必从文件重新加载它。
配置文件通常很小,但 YAML(与 msgpack、JSON 相比)加载速度相对较慢,因此应尽可能防止重新读取。